相关疑难解决方法(0)

"访问被拒绝"尝试访问以编程方式创建的<iframe>的文档对象时出现JavaScript错误(仅限IE)

我有一个项目,我需要使用JavaScript创建一个<iframe>元素并将其附加到DOM.之后,我需要在<iframe>中插入一些内容.它是一个嵌入第三方网站的小部件.

我没有设置<iframe>的"src"属性,因为我不想加载页面; 相反,它用于隔离/沙箱插入我插入的内容,以便我不会遇到CSS或JavaScript与父页面冲突.我正在使用JSONP从服务器加载一些HTML内容并将其插入此<iframe>.

我有这个工作正常,有一个严重的例外 - 如果在父页面中设置document.domain属性(它可能在部署此小部件的某些环境中),Internet Explorer(可能是所有版本,但我已经当我尝试访问我创建的<iframe>的文档对象时,在6,7和8中确认给了我"访问被拒绝"错误.它不会在我测试的任何其他浏览器中发生(所有主要的现代浏览器).

这是有道理的,因为我知道Internet Explorer要求您将所有窗口/框架的document.domain设置为相互通信到相同的值.但是,我不知道有任何方法可以在我无法访问的文档上设置此值.

是否有人知道这样做的方法 - 以某种方式设置此动态创建的<iframe>的document.domain属性?或者我不是从正确的角度看待它 - 有没有另一种方法可以实现我的目标而不会遇到这个问题?我确实需要在任何情况下使用<iframe>,因为隔离/沙盒窗口对于此小部件的功能至关重要.

这是我的测试代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Document.domain Test</title>
    <script type="text/javascript">
      document.domain = 'onespot.com'; // set the page's document.domain
    </script>
  </head>
  <body>
    <p>This is a paragraph above the &lt;iframe&gt;.</p>
    <div id="placeholder"></div>
    <p>This is a paragraph below the &lt;iframe&gt;.</p>
    <script type="text/javascript">
      var iframe = document.createElement('iframe'), doc; // create <iframe> element
      document.getElementById('placeholder').appendChild(iframe); // append <iframe> element to …
Run Code Online (Sandbox Code Playgroud)

javascript iframe internet-explorer dom document

80
推荐指数
2
解决办法
19万
查看次数

更改iframe src时如何设置自定义http标头?

有没有办法在<iframe>使用javascript更改源(src)时为自己完成的请求添加自定义http标头?

javascript iframe httprequest

36
推荐指数
4
解决办法
6万
查看次数

在IE11中将Blob网址用于src

我们正在<iframe>动态创建s(例如,用于富文本编辑器或调试窗口),并将html注入src。多年来,我们一直使用类似于该答案javascript:网址,直到遇到带有多个独立iframe的同源策略问题。src

我们当前的解决方案是为包含html的blob创建一个对象url:

var iframe = document.createElement('iframe')
  , html = '<h1>it works!</h1>'
  , blob = new Blob([html], {type: 'text/html'})
  , url = URL.createObjectURL(blob);

iframe.src = url;
document.querySelector('body').appendChild(iframe);
Run Code Online (Sandbox Code Playgroud)

这在Chrome和Firefox中可以正常运行,但在IE11中则不能(对于未定义URLBlob未定义的浏览器,我们会使用该javascript:解决方案)。IE11加注。SCRIPT5: Access is denied

我们是否滥用API?IE是否有特殊的API?已知的解决方法?

javascript internet-explorer

5
推荐指数
1
解决办法
4108
查看次数