【发布时间】:2017-10-30 14:38:17
【问题描述】:
以下代码在 IE 中抛出 Permission Denied 错误,引用 jQuery (1.6.2) line 6244 Char:2:
function addAgreement() {
var url = window.location.toString();
var pieces = url.split('/');
var site_url = url.replace(pieces[pieces.length -1], '');
$('.login').append('<div id="dialog"></div>');
$('#dialog').load(site_url + '?page_id=443');
}
$('#dialog').dialog({
width: 800,
position: 'top',
modal: true,
buttons: {
"Agree": function() {
agreed = true;
var val = $('#registerform').attr('action') + '&agreed=1';
$('#registerform').attr('action', val);
$(this).dialog("close");
$('#registerform').trigger('submit');
},
"Disagree": function() {
agreed = false;
$(this).dialog("close");
}
}
});
它在 Firefox 中有效——这与同源策略有关吗? jQuery 由 Google CDN 提供服务。
更新
正在加载的内容是一个 WordPress 页面,其中还包含 cufon-yui.js(在本地提供)。我也尝试过在本地提供 jQuery(即不是来自 Google CDN),这没有任何区别。
更新 2 从加载的页面中删除以下脚本标记会阻止错误出现。
<script type='text/javascript' src='<?php echo bloginfo('template_url') ?>/inc/js/cufon-yui.js'></script>
<script type='text/javascript' src='<?php echo bloginfo('template_url') ?>/inc/js/path/to/font.js'></script>
<script type='text/javascript'>
Cufon.replace('#page')('.title');
</script>
【问题讨论】:
-
加载调用中加载的内容与调用页面在同一个子域中,所以我不确定是不是这样。
-
不是同一个域的问题。返回的 html 是否是有效的 html,这意味着没有失控的属性字符串(缺少尾随引号)并且标签是否正确打开和关闭?另外,您是否肯定该代码仅在包含此代码时才会失败? 1.6.2 有一个bug,当body 标签上有背景图片时,会导致IE 失败。
-
谢谢。看起来正在加载的内容不是有效的 html,并且不包含 HTML、BODY、HEAD 标记等。删除 load() 调用确实会清除错误。
-
当您使用 .load() 时,html body 和 head 将从生成的 html 中删除,因为这些标签已经存在于请求 html 的页面上。这不会导致此错误。
标签: javascript jquery internet-explorer