好吧我有一个包含框架集的页面。其中一个框架包含一个asp页面,其中包含用javascript编写的脚本。 此脚本需要能够访问包含在另一个框架内(在框架集中)的asp页面的内容。以下是框架集代码的示例:
<frameset name="foo">
<frame name="frame1" src="mydomain/path/of/the/page.asp">
<frame name="frame2" src="mydomain/path/of/the/other/page.asp">
所以基本上 frame1中包含的页面内的脚本试图访问frame2中包含的页面内的内容(更具体地说是尝试插入DOM元素)。
两个框架都在同一个域(和子域)上,因此跨脚本编写不应成为问题。我无法编辑脚本之外的代码,因此我不得不使用框架。这是我目前的代码:
//Ideally, I would like to make sure the page contained within frame2 is loaded before trying to access it's elements. I still need to figure that one out.
$(document, window.parent).ready( function () {
//Assign id "foo" to frame2 using jQuery
$('frame[name="foo"]', window.parent.document).attr("id", "foo");
var doc;
var testNode;
var frmObj = window.parent.document.getElementById('foo');
if (frmObj.contentDocument) { // DOM
doc = frmObj.contentDocument;
}
else if (frmObj.contentWindow) { // IE
doc = frmObj.contentWindow.document;
}
if (doc) {
testNode = doc.createElement('div');
testNode.Id = "testNode";
doc.getElementByTagName('body').appendChild(testNode);
}
});
包含getElementByTagName的行在IE 10中引发错误:
SCRIPT438:对象不支持属性或方法'getElementByTagName'
似乎文档对象没有任何名为getElementByTagName的方法。在这种情况下,可以说文档对象不存在,这是荒谬的,因为我在尝试调用它的方法之前测试了它的存在。了解这一切,我们如何解决这个问题?
注意:
非常感谢!
答案 0 :(得分:2)
HTML5不支持框架,如果您有正确的文档类型声明,则会看到空白页。
无论如何,不需要使用jQuery,这要简单得多:到frameset
窗口,你引用始终和top
,你可以用{{{{{{{ 1}}(不需要top.frame_name
),无论你想在哪里引用它们。当您需要文档时,它就在id
对象下面。在您的情况下:window
或top.frame1.document
。
另请注意,top.document
是foo
的名称,而不是任何框架。因此frameset
没有按照您的期望行事。 (或者也许只是帖子中的拼写错误?)
这应该可以完成这项工作,但在$('frame[name="foo"]', window.parent.document).attr("id", "foo");
top
存在body
之前,frame2
可能已经准备好了很长时间。
$(document, top).ready(function () {
var testNode,
frmObj = top.frame2,
doc = frmObj.document;
if (doc) {
testNode = doc.createElement('div');
testNode.id = 'testNode';
doc.body.appendChild(testNode);
}
});