好吧我有一個包含框架集的頁面。其中一個框架包含一個包含用javascript編寫的腳本的asp頁面。 該腳本需要能夠訪問另一個框架(框架集)中包含的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">
所以基本上包含幀1中的頁面裏面的腳本嘗試訪問的內容(更具體地說試圖插入一個DOM元素)包含式2中的頁面中。
兩個框架在同一個域(和子域)上,所以交叉腳本不應該是問題。我無法編輯腳本外的代碼,所以我不得不使用框架。這裏是我當前的代碼:
//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的方法。在這種情況下,可以說文檔對象不存在,這是荒謬的,因爲我已經在調用它的方法之前測試了它的存在。知道這一切,我們該如何解決這個問題?
注:
- 我不能與其他瀏覽器測試問題,因爲所有的網頁所需的外部代碼使用VBScript中。
- id「foo」已成功添加到frame2。
非常感謝!
@OlivierBlanchard怎麼了?首先你接受了答案,拒絕了答案。如果您還有其他問題,請發表評論。 – Teemu
對不起,你挑逗Teemu,我選擇你的帖子作爲錯誤選擇的答案。不過,我也想感謝您花時間回答我的問題。正如我在我的問題中所述,id「foo」已成功添加到frame2。選擇器的語法應該是好的,因爲我選擇了所有幀中名稱爲「foo」的幀,並且上下文是幀中包含的頁面的父文檔。糾正了代碼中的一些錯誤之後,它也起作用了。我重新將您的答案標記爲已接受的唯一原因是因爲它的優雅。 –
@OlivierBlanchard大聲笑...沒有錯誤,它是完全有效的JS鏈變量聲明與[逗號](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var )。實際上它是由翻譯人員完成的(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var),一些JS指南甚至建議它是唯一有效的方法編寫功能。 – Teemu