2
因此我有一個外部JavaScript文件,我們可以將它稱爲something.js
,然後我將它寫入文檔。出於某種原因,我無法訪問Safari或FireFox中的功能。動態編寫腳本時Javascript功能無法訪問
它去有點像這樣:
<script type="text/javascript">
document.write(decodeURI("%3Cscript src='something.js' type='text/javascript'%3E%3C/script%3E"));
myFunction();
</script>
所以這告訴我myFunction是空的,但如果我把同樣的函數調用在something.js年底,它的工作原理。現在這不是確切的情況,所以我意識到對於這個特殊情況,這不是最好的解決方法。
直接使用'
我認爲這是因爲
myFunction();
在包含它在瀏覽器中加載的整個.js文件之前被調用,請嘗試延遲myFunction();
調用幾秒鐘,然後再次測試以確保這是問題所在。來源
2010-03-10 22:57:50
如果我延遲2秒,它會延遲我的網頁加載2秒? – 2010-03-10 22:59:47
它可能,是的! ... – Cheeso 2010-03-10 23:00:51
是的,特別是如果這個腳本代碼存在於你的頁面代碼的開頭 – 2010-03-10 23:01:40
使用document.write打印腳本包含標記後,瀏覽器在加載外部腳本之前繼續執行(嘗試調用
myFunction()
)。所以,你的腳本還沒有可用。來源
2010-03-10 22:58:40
script
塊文檔的head
(如果它不是 已經)myFunction()
電話。myFunction()
調用不同script
塊 文檔某處低。第1步是最好的做法,但我不認爲任何瀏覽器會嗆,如果你動態地包括在文檔中的某些其他點的JS文件。
關鍵是你不能在包含的同一個腳本塊中使用包含的JS代碼。
這適用於Firefox,我不能擔保Safari。
來源
2010-03-10 23:31:12
通常我不會寫兩個不同的答案,但是這是一個非常不同的答案,這只是作爲可能的工作。
撥打電話
something_ready()
在something.js的底部。不要在something.js中定義something_ready()
,在你的html文檔中定義它。所以沒有定時器,沒有不必要的檢查。
這將工作,它只是假設你有權訪問something.js,你可能不會。如果不是,我提供的其他答案將起作用。
來源
2010-03-10 23:55:46
這是行不通的嗎?
來源
2010-03-11 00:10:53 Tracker1
要做到這一點,最簡單的辦法就是寫兩個劇本<塊>。
當文件撰寫時,文本直接寫入文件中,<腳本>標籤之後。因此,當瀏覽器遇到<腳本>標記時,它將等待腳本完成加載,然後再繼續下一頁。任何發生在加載腳本中的document.write都可能會影響頁面的其餘部分(例如,如果您執行「document.write('<div>')」,則會影響其餘佈局)。
因此,如果您使用兩個<腳本>標籤,第一個是由瀏覽器遇到的,它使用文件撰寫輸出一個新<腳本>標籤。一旦<腳本>標記完成,瀏覽器繼續向下翻頁,並立即遇到新的,動態添加的<腳本>標記。這<腳本>標記告訴瀏覽器加載您的外部Javascript。瀏覽器將等待執行第二個原始<腳本>標記,直到此<腳本>標記已完成加載。那麼你的功能myFunction將可用。
之所以做這一切在一個<腳本>標籤不起作用是因爲文件撰寫不會發生,直到<腳本>運行完畢後(myFunction的還不可用)。它的工作原理有兩個<腳本>標籤的原因是因爲瀏覽器等待,直到每個<腳本>標籤連續運行,文件撰寫提出了新的<腳本>標籤一致。
來源
2010-06-29 15:46:36 thirdender