Неподдаваться проблеме TypeError ( "no access" ) с jquery в зависимости от навигации браузера

Я попытался исследовать это, но я полностью в тупике. Я думаю, что это может иметь какое-то отношение к политике одного и того же происхождения, но я не могу понять, как это относится к моему коду.

У меня есть сайт php с jquery и bootstrap, который отображает динамическую веб-форму в mysite/build.php. Глава, содержащая мои вызовы script, показана ниже:

<head>
    <!-- jQuery -->
    <script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha256-cCueBR6CsyA4/9szpPfrX3s49M9vUU5BgtiJj06wt/s=" crossorigin="anonymous"></script>

    <!-- Bootstrap Latest compiled and minified CSS -->
    <link rel="stylesheet" href="#" onclick="location.href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css'; return false;" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">        

    <!-- Bootstrap Latest compiled and minified JavaScript -->
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

    <!-- app CSS -->
    <link href="/css/styles.css" rel="stylesheet"/>

    <!-- Are-You-Sure dirty form checker -->
    <script src="/js/are-you-sure.js"></script>

    <!-- app JavaScript -->
    <script src="/js/build-edit-scripts.js"></script>

    <!-- obtain sheet data for edit mode -->
    <?php if (isset($items)): ?>
        <script type="text/javascript">
            var items = <?php echo json_encode($items) ?>; 
            var sheetinfo = <?php echo json_encode($sheetinfo) ?>;
            var slug = <?php echo json_encode($slug) ?>;
        </script>
    <?php endif ?>

    <!-- obtain single block and bullet elements for js -->
    <script> var blockHTML = <?php echo json_encode($blockhtml) ?>; var bulletHTML = <?php echo json_encode($bullethtml) ?>;</script>

    <title><?= (isset($sheetinfo)) ? "Edit: ".htmlspecialchars($sheetinfo['name']) : "Shopping List Generator"; ?></title>

</head>

Затем начало моего пользовательского javascript (build-edit-scripts.js) показано ниже

//execute when DOM fully loaded 
$(function() {

// enable areYouSure plugin to detect dirty form changes
$('#myform').areYouSure();

// mark form as dirty any time any text input changes
$(document).on('change', 'input:text', function() {
    $('#myform').addClass('dirty');
});

    // create empty array for existing slugs
    var slugs = [];

    // initiate ajax request to get dir listing of existing sheets
    $.ajax({

        url: "json-io.php",

        data: {
            purpose: "sheetlist"
        },

        type: "POST",

        dataType : "json"
    })

    // if successful
    .done(function(dirjson) {
            slugs = dirjson;
          })

    // if failure
    .fail(function( xhr, status, errorThrown ) {
            alert( "Server Error" );
            console.log( "Error: " + errorThrown );
            console.log( "Status: " + status );
            console.dir( xhr );
    });         

    // give focus to title field
    $("#title").focus();

Когда я изначально загружаю build.php или жестко обновляю его, у меня нет проблем. Тем не менее, всякий раз, когда я перехожу к внешнему сайту, а затем ударяет по обратной навигации и возвращается к build.php, я получаю следующую консольную ошибку:

Uncaught TypeError: нет доступа (@jquery-3.1.0.min.js: 2)

а затем проблемы, связанные с неправильной загрузкой jquery

Неподготовленная ошибка: Bootstrap JavaScript требует jQuery (@bootstrap.min.js: 6)

Uncaught ReferenceError: jQuery не определен (@are-you-sure.js: 192)

Uncaught ReferenceError: $не определен (@build-edit-scripts.js: 12)

Здесь ни одна из моих JS не работает. Первоначально я думал, что это может быть связано с проблемой моего запроса ajax, но даже когда я полностью удаляю запрос ajax, проблема сохраняется. Любое понимание было бы оценено с большой благодарностью, поскольку я не могу показать, что проблема возникает. Спасибо.

Ответ 1

Это произошло потому, что у меня (или была) такая же ошибка в Chrome при навигации с помощью кнопки "Назад" из ссылки. Как только страница загружается после навигации, и любой script пытается получить доступ к объекту окна, эта ошибка возникает.

Эта страница была одной из двух ссылок на это сообщение об ошибке ( "Uncaught TypeError: no access" ). Я могу найти где-нибудь в Интернете, а другой - отчет об ошибке Chrome, который предположительно был исправлен год назад. Не думайте, что это имеет какое-либо отношение к jQuery (наш - чистый javascript), но понятия не имеет, что вызывает его или что это значит, это кажется очень неясной ошибкой. После перезапуска браузера эта ошибка больше не воспроизводима, но она была замечена более одного раза. Это происходит, как только код script пытается прочитать любое свойство окна объекта window. Проводя это, если кто-нибудь подскажет, что означает эта ошибка и что может вызвать ее.

Ответ 2

Единственное, о чем я могу думать, это то, что ваши CORS не настроены должным образом, хотя это кажется прекрасным, или ваш документ не полностью загружен, когда вы пытаетесь получить доступ к jQuery, который выглядит так, как будто ваш код должен загружаться нормально.

Вы уверены, что вам нужны теги integrity="sha256-cCueBR6CsyA4/9szpPfrX3s49M9vUU5BgtiJj06wt/s=" crossorigin="anonymous" в конце ваших включений script? Возможно, это не правильные параметры и могут вызвать некоторые конфликты.

Ответ 3

Это происходит со мной несколько раз на YouTube. Это заставляет меня думать, что это ошибка Chrome, так как я уверен, что у них будут все, как CORS, правильно настроенные.

Перезагрузка страницы обычно исправляет ее, но это происходит довольно часто (мой браузер был открыт в течение нескольких дней.) Как говорили другие, нажатие кнопки "назад" часто вызывает это, но как YouTube загружает свои страницы, я получаю это даже просто щелкнув видео, чтобы вернуться на главную страницу YouTube.

Мое предложение - снова поднять ошибку, как это происходит на собственных веб-сайтах Google.

Здесь ошибка с консоли Chrome - я думаю, что это происходит до того, как скрипты страницы запущены:

(unknown) Uncaught TypeError: no access       (unknown)
    at <anonymous>:10:29
    at <anonymous>:58:5
(index):1 Uncaught TypeError: no access       (index.js:1)
    at (index):1
(index):11 Uncaught TypeError: no access
    at Object.k [as runBeforeBodyIsReady] ((index):11)
    at (index):16
scheduler.js:10 Uncaught TypeError: no access
    at scheduler.js:10
    at scheduler.js:40