2011-06-29 51 views
0

我在檢索鏈接到body標籤時遇到了問題。我已經試過:Opera中的Document.body

  1. document.body,不幸的是它是空
  2. 搜索按標籤名身體,同時列舉的文檔孩子的,它的發現只有頭部標籤:(
  3. document.getElementsByTagName,返回undefined

我試圖在onload事件處理程序中獲取body標籤的鏈接。這是頁面的HTML代碼:

<html> 
    <head> 
     <title>Some page</title> 
     <script src="/adv.js" type="text/javascript"></script> 
    </head> 
    <body> 
     This is text 
    </body> 
</html> 

這裏adv.js源代碼:中adLoader.js

(function() { 

    var myRandom = function (min, max) { 
     return Math.floor(Math.random() * (max - min + 1)) + min; 
    }; 

    var myFunction = function() { 
     var newScriptAddr = '/adLoader.js?r=' + myRandom(1,1000000); 

     var fileref = document.createElement('script'); 
     if (typeof fileref != "undefined") 
     { 
      fileref.setAttribute("type", "text/javascript"); 
      fileref.setAttribute("src", newScriptAddr); 

      document.getElementsByTagName("head")[0].appendChild(fileref); 
     } 
    }; 

    if (window.onload) 
    { 
     var currOnLoad = window.onload; 
     window.onload = function() { 
      currOnLoad(); 
      myFunction(); 
     }; 
    } 
    else 
     window.onload = myFunction(); 

})(); 

的源代碼:

(function() { 

    var mainCnt = document.createElement('div'); 
    mainCnt.appendChild(document.createTextNode('The text')); 

    var _body = document.body; 

    if (!_body) 
    { 
     var htmlTag = document.documentElement; 
     for(var i = 0; i < htmlTag.childNodes.length; i++) 
     { 
      if (htmlTag.childNodes[i].nodeName.toLowerCase() == 'body') 
      { 
       _body = htmlTag.childNodes[i]; 
       break; 
      } 
     } 
    } 

    if (!_body) 
     _body = document.getElementsByTagName('BODY') [0]; 

    if (!_body) 
     _body = document.getElementsByTagName('body') [0]; 

    if (_body) 
     _body.appendChild(mainCnt); 
    else 
     alert('WTF!!'); 

})(); 

瀏覽器是Opera 11.10操作系統Ubuntu Linux操作系統。有沒有辦法獲得這個鏈接?我的目標是將position:fixed的div添加到body標籤。

+1

請附上JS代碼 – yoavmatchulsky

+1

JS在哪裏?它是否在頁面內(如果是這樣,爲什麼我們不能在你的示例代碼中看到它)?它是否在擴展?小書籤?你如何將它附加到onload處理程序? – Quentin

+0

Opera自己的開發站點有'document.body.appendChild()'的例子,所以奇怪它不起作用。 (http://dev.opera.com/articles/view/introduction-to-user-javascript/ - 雖然這個例子在使用之前測試了'document.body',但沒有解釋爲什麼它可能不可用。) – nnnnnn

回答

3

myFunction()不會返回一個函數,因此您將undefined指定給window.onload。您可能的意思是window.onload = myFunction;

無論如何,正如現在寫的,代碼立即運行,尚未達到正文元素。

+3

雖然這是正確的答案,但它可能會讓你困惑,爲什麼你只在Opera中遇到這個問題。它在每個瀏覽器中都不會中斷的原因是,有些瀏覽器在加載使用appendChild()插入的外部腳本時保持提前解析,因此Opera不會因當前代碼而失敗。 (這是我們需要修復的已知錯誤)。 – hallvors

+0

我剛剛遇到了同樣的問題,我的'document.getElementsByTagName('BODY')[0]'Javascript行僅在Opera中返回了一個未定義的錯誤。通過在''標籤後面放置我的Javascript代碼來解決該問題,因爲在Opera中,所有外部JS文件都會加載,然後在繼續執行頁面的其餘部分之前運行。 – pppglowacki

-1

如果js代碼在head標籤和查詢body標籤之前onload事件,null應該在瀏覽器剛剛讀取頭時才能得到。

+0

問題是代碼在onload事件處理程序中。 – Quentin