我不认为这是可能的,但我现在比早上更讨厌IE6了。
请不要烦我为什么,但我会尽力解释我们正在努力实现的目标。我们有两个应用在运行,比方说APP1 &APP2,两者都在同一域上。APP1包含了一个托管在APP2上的JavaScript文件。这个JS文件将:- 创建IFrame(使用document.createElement)
- 将IFrame的源设置为APP2的根目录(生成一些HTML);
- 添加div到APP1
- 读取IFrame的内容(即APP2生成的HTML)
- 将此内容设置为div的innerHTML (3)
所以最后在APP1中,我们有一个标题,其中的内容是由APP2生成的,而屏幕上没有IFrame。
问题出在步骤4;这对于除了IE6之外的所有浏览器都是有效的(这可能是web开发中最常用的句子吗?)我得到一个js错误时,试图访问contentWindow。iframe的文件:"访问被拒绝"。我不是专家,但据我所知,如果两个应用程序不在同一域名上,但它们是(dev.echnet/APP1 &dev.echnet/APP2)。
这是我在以上步骤中使用的代码(如果不是IE6,则取出不执行的东西):(1)、(2);(3):
var elIf;
$().ready(function()
{
elIf = document.createElement('<iframe name="uhframename">');
elIf.setAttribute('id','idUhFrame');
document.body.appendChild(elIf);
var uhDiv = document.createElement('div');
document.body.appendChild(uhDiv);
elIf.src='dev.echnet/APP1?nocache='+Math.random();
getText();
}
(4)
function getText() {
var sContent = "";
if (elIf.contentWindow.document.body) { // access denied on elIf.contentWindow.document
...
}
}
我在谷歌上搜索了很多,尝试了很多我发现的可能性(也在SO上),但似乎没有一个能解决这个问题。
我还尝试通过将其源设置为:
在IFrame上显式设置域。" javascript:(函数(){document.open (); document.domain = "dev.echnet ";document.close ();}) ()"
,但我不确定这是否有任何影响,因为我将源设置为其他几个步骤。不管怎样,既然是同一个域,应该无所谓吧?
希望有人帮助或有人击落所有的IE6用户(一个可行的任务现在),所以我可以跳过这个任务:-)。
在对这里的另一个问题进行了一些工作之后,我想出了这个解决方案。
似乎.document
并不总是必需的。
我使用的是chrome,它不能与.document
一起工作,但没有它就像一个魅力