'权限被拒绝'。加载IE上的当前页面

时间:2011-08-16 13:57:36

标签: javascript jquery internet-explorer same-origin-policy

假设我正在测试服务器子文件夹上的网站,例如http://12.123.12.12/domain.tld/。当我在根页面上时,我可以愉快地做一个

$('#dummy').load('http://12.123.12.12/domain.tld/page.html')

(警告成功消息的回调函数会触发。)但是,如果我尝试

$('#dummy').load('http://12.123.12.12/domain.tld/folder/page.html')

我只在IE中收到'权限被拒绝'错误(同一来源政策错误)。

如果省略IP地址,即$('#dummy').load('/domain.tld/...'),我会获得相同的成功/失败。我不知道为什么IE会像这样;它只是一个子文件夹。 (事实上​​,它是带有.html扩展插件的Wordpress,但我看不出这是问题所在。)

编辑:事实证明,只有在加载我当前正在浏览的网页时,我才会拒绝该权限。例如,假设我的浏览器指向http://12.123.12.12/domain.tld/folder/page.html,如果我再尝试

$('#dummy').load('http://12.123.12.12/domain.tld/folder/page.html')

然后发生错误。

2 个答案:

答案 0 :(得分:1)

权限被拒绝来自same origin policy。从文件夹访问数据不会成为问题。我猜你的浏览器地址中的内容不是http://12.123.12.12/domain.tld

答案 1 :(得分:1)

因此,正如所描述的那样,确切的问题是IE不喜欢加载URL(如果已经在其上)。如果浏览器在任何子目录结构中的任何 http://123.12.12.12/domain.tld/page.html处于page.html,则以下jQuery将失败:

$('#container').load('http://123.12.12.12/domain.tld/page.html');

失败的特征是“权限被拒绝”错误,通常与同一原始政策相关。

要解决此问题,请在请求中附加一个虚拟对象,这会强制jQuery将其作为POST请求(而不是默认的GET)发送,例如:

$('#container').load('http://123.12.12.12/domain.tld/page.html', {one : 1});

并且负载现在按预期工作。