2013-06-12 54 views
2

好吧我有一個包含框架集的頁面。其中一個框架包含一個包含用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。

非常感謝!

回答

2

HTML5不支持框架,如果您有適當的文檔類型聲明,您會看到一個空白頁面。

無論如何,沒有必要使用jQuery,這是更簡單:frameset窗口您參考總是top,所有框架窗口,你可以用top.frame_name趕上(無需id),無論在哪裏,你要轉介他們。當你需要一個文件時,它正好在window對象下。在你的情況下:top.frame1.documenttop.document

另請注意,fooframeset的名稱,而不是任何幀。因此$('frame[name="foo"]', window.parent.document).attr("id", "foo");沒有做你期望的。 (或者可能只是在帖子中的錯字?)

這應該做的工作,雖然top可能已經準備好了很長時間bodyframe2frame2存在。

$(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); 
    } 
}); 
+0

@OlivierBlanchard怎麼了?首先你接受了答案,拒絕了答案。如果您還有其他問題,請發表評論。 – Teemu

+0

對不起,你挑逗Teemu,我選擇你的帖子作爲錯誤選擇的答案。不過,我也想感謝您花時間回答我的問題。正如我在我的問題中所述,id「foo」已成功添加到frame2。選擇器的語法應該是好的,因爲我選擇了所有幀中名稱爲「foo」的幀,並且上下文是幀中包含的頁面的父文檔。糾正了代碼中的一些錯誤之後,它也起作用了。我重新將您的答案標記爲已接受的唯一原因是因爲它的優雅。 –

+0

@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

相關問題