SCRIPT70: 权限被拒绝 IE9

21

我在IE9浏览器上遇到了奇怪的错误"SCRIPT70: Permission denied jquery.js, line 21 character 67"。在谷歌上搜索,除了一个关于CKEditor的错误之外,没有找到其他信息。

它显示的位置只包含以下内容:

P=navigator.userAgent,xa=false,Q=[],M,ca=Object.prototype.toString,da=Object.prototype.hasOwnProperty,ea=Array.prototype.push,R=Array.prototype.slice,V=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(typeof a==="string")if((d=Oa.exec(a))&&(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Sa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];

有人遇到过这个错误吗?

*更多信息:*我们打开了一个iframe,在该iframe内调用了一些JavaScript函数。

谢谢。


2
你需要使用非压缩版本来复现它,这样你就可以看到实际导致问题的代码行。 - ThiefMaster
1
我刚刚意识到,它不允许任何脚本文件。我在一个非压缩的js文件中看到了一行非常简单的代码。 var imageType = jQuery("#imageType").val(); 我们打开一个iframe并尝试在其中运行JavaScript,这可能是原因吗? - mehmet6parmak
9个回答

11

在IE9中出现SCRIPT70错误的情况很可能是因为您的iframe调用了一些JavaScript代码(特别是影响父页面的代码,例如更改父URL的哈希值)

请检查您的iframe的主机/协议/端口号是否匹配。 IE9对主机名(在我的情况下甚至包括www部分)非常严格,并且document.domain似乎无法解决此问题。

在处理多个iframe时遇到了这个问题并进行了修复,希望这篇文章可以帮助其他遇到同样问题的人。


我在IE11中从iFrame使用window.postMessage发送到父级跨域域时遇到了这个问题。在Edge浏览器中它可以正常工作。有人能详细解释一下“主机/协议/端口号匹配”的含义吗? - user2568374

2
function Sizzle( selector, context, results, seed ) {
  var match, elem, m, nodeType,

  // QSA vars
  i, groups, old, nid, newContext, newSelector;

  // MY EDIT - this try/catch seems to fix IE 'permission denied' errors as described here:
  // http://bugs.jquery.com/ticket/14535

  try{
    document === document; //may cause permission denied
  }
  catch(err){
    document = window.document; //resets document, and no more permission denied errors.
  }

  if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
    setDocument( context );
  }

  //...... snip .........//
}

http://jsfiddle.net/xqb4s/


3
您应该在您的答案中添加一些解释性文本。此外,我不明白您的jsfiddle如何证明任何事情。 - Peter Sorowka
1
你需要编辑你的jquery-*.js文件,在sizzle函数内添加try catch语句(该函数导致了访问被拒绝的问题)。我不喜欢在jquery文件中修改,但这确实能解决问题。 - David

2
我曾经遇到过IE9的这个问题,实际上,在IE11中也会出现。我的问题是我通过http打开了一个网站(即http://mywebsite.com),而我的代码中的iframe尝试使用https访问网站的某个部分。这导致了错误。一旦我使用https访问网站,错误就消失了。一个旧书签使用了http,而网站已更新为https,所以请检查您的URLS。

1

如果iframe指向与父站点不同的域名,您将无法访问任何iframe的内容。


0

0
最近我遇到了这个错误。在我正在工作的应用程序中,我使用TinyMce文本编辑器来编写电子邮件。这会创建一个包含电子邮件编写所需对象的< b>iframe 。在看到许多关于该错误的博客后,我尝试以编程方式删除TinyMce文本编辑器对象,然后触发重定向。结果成功了!

-2
面对类似的问题(也许不是与jquery.js有关,但错误描述相同),解决方案与上述略有不同。实际上,我在regedit中搜索了其他iexplore.exe行。我找到了另外两个并将其更改为1,然后问题就解决了。
hkey_local_machine\software\microsoft\internet explorer\main\featurecontrol\feature_protocol_lockdown 
hkey_local_machine\software\microsoft\internet explorer\main\featurecontrol\feature_internet_shell_folders

-2
如果您运行的是64位操作系统,请确保此键的值也设置为1:HKEY_LOCAL_MACHINE\SOFTWARE\**Wow6432Node**\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_OBJECT_CACHING\\iexplore.exe 没有这个键,我们在Internet Explorer 11中会遇到随机的SCRIPT70:权限被拒绝错误。

-3

从这个页面得到的提示应该有所帮助:http://forum.jquery.com/topic/strange-behaviour-in-ie9

确保 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_OBJECT_CACHING\iexplore.exe 没有被设置为0(应该是1或者缺失)


16
他们真的希望我告诉所有访问我的公共网站的IE9用户这个吗? - Marcel Stör
6
这绝对是最糟糕的想法。你不能指望我告诉我的三千万用户去更改他们的注册表。你是认真的吗? - Ryan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接