我试图研究这个,但我完全难过了。我认为这可能与same-origin policy有关,但我无法弄清楚它与我的代码有什么关系。
我有一个运行jquery和bootstrap的php站点,它在mysite / build.php呈现动态Web表单。包含我的脚本调用的头部如下所示:
<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="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" 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 时,我收到以下控制台错误:
未捕获的TypeError:无法访问(@jquery-3.1.0.min.js:2)
后面跟着不正确的jquery加载相关的问题
未捕获错误:Bootstrap的JavaScript需要jQuery(@ bootstrap.min.js:6)
未捕获的ReferenceError:未定义jQuery(@ are-you-sure.js:192)
未捕获的ReferenceError:$未定义(@ build-edit-scripts.js:12)
从这里开始,我的JS其余部分都没有。我原本以为这可能是由于我的ajax请求有问题,但即使我完全删除了ajax请求,问题仍然存在。任何见解都会受到高度赞赏,因为我似乎无法针对问题发生的目标。感谢。
答案 0 :(得分:10)
遇到这个因为我在使用链接中的后退按钮导航回来时Chrome中的错误相同(或者有)。导航后加载页面并且任何脚本尝试访问窗口对象时,都会发生此错误。
此页面是此错误消息的仅有2个引用之一(&#34;未捕获的TypeError:无权访问&#34;)我可以在网络上的任何位置找到 - 另一个是Chrome错误报告,据称已修复一年前。不要认为它与jQuery(我们的纯javascript)有任何关系,但不知道是什么导致它或它意味着什么,它似乎是一个非常模糊的错误。重新启动浏览器后,此错误不再可重现,但已多次出现。一旦脚本代码尝试读取窗口对象的任何窗口属性,就会发生这种情况。如果有人知道这个错误意味着什么以及可能导致它的原因,就发布这个。
答案 1 :(得分:1)
我唯一能想到的是你的CORS没有正确配置,虽然看起来很好,或者你试图访问jQuery时你的文档没有完全加载,看起来你的代码应该加载正常
您确定在脚本包含的末尾需要integrity="sha256-cCueBR6CsyA4/9szpPfrX3s49M9vUU5BgtiJj06wt/s=" crossorigin="anonymous"
标记吗?这些可能不是正确的参数,可能会导致一些冲突。
答案 2 :(得分:0)
YouTube上经常发生这种情况。这让我觉得这是一个Chrome错误,因为我很确定他们已经正确配置了CORS等所有内容。
重新加载页面通常会修复它,但它经常发生(我的浏览器已经开放了几天。)正如其他人所说的那样,按下后退按钮通常会导致它,但是YouTube加载页面的方式我得到了这个甚至只需点击视频即可返回YouTube主页。
我的建议是再次提出错误,因为它现在正在谷歌自己的网站上发生。
以下是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