如何为动态生成的IFRAME设置document.domain?

6

我正在实现CodeMirror(http://marijn.haverbeke.nl/codemirror/),在一个需要声明document.domain的页面上(因为页面上有其他IFRAMES)。

CodeMirror生成一个动态IFRAME来提供语法突出显示的代码编辑。问题是IE会在以下CodeMirror代码段中抛出“访问被拒绝”的错误(其他浏览器没有问题):

this.win = frame.contentWindow;
...
var doc = this.win.document; <-- ERROR
doc.open();
doc.write(html.join(""));
doc.close();

事实证明IE不会从父级IE继承document.domain。我可以在IFRAME内容中设置document.domain,但是在我设置内容之前,IE就会抛出错误。有什么办法解决这个问题吗?


这里曾经讨论过类似的问题,但是解决方法对我不起作用 http://www.telerik.com/community/forums/aspnet-ajax/editor/document-domain-access-denied-in-ie-6.aspx - Paras Chopra
1
抱歉,但是在另一个[答案][1]中的CodeMirror_boilerplate对象是什么?是div吗?还是iframe?是什么? [1]:https://dev59.com/cEzSa4cB1Zd3GeqPo7M5#2487023 - JwJosefy
1个回答

9

终于搞定了。这是基于TinyMCE代码的一个技巧。

var u = 'javascript:(function(){document.open();document.domain="' + document.domain + '";var ed = window.parent.CodeMirror_boilerplate;document.write(ed);document.close();})()';

frame.src = u;

此代码将SRC中的document.domain属性设置为u,而不是通过DOM设置。


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