2013-02-05 75 views
1

我在應用程序中包含了一些第三方代碼,並且我看到它使用包裝在try..catch語句中的document.write()代碼。 document.write()不返回任何東西,所以我想知道是否有一種方法來測試document.write()是否成功,所以我可以測試捕獲錯誤。作爲一個例子,我試着包含這個腳本異步,但是這停止了document.write()部分的執行,但是它沒有運行catch()部分中的代碼。如何測試document.write()是否成功

示例代碼:

try { 
    document.write('<script type="text/javascript" src="/plugin.js">'); 
    console.log('OK'); 
} catch (e) { 
    console.log('ERROR'); 
} 

回答

3

您可以從DOM ID新增id來script標籤,然後把它拿來:

document.write('<script type="text/javascript" src="/plugin.js" id="myscript"></script>'); 
if (document.getElementById('myscript')) { 
    console.info('success'); 
} else { 
    console.error('failure'); 
} 

,或者你可以嘗試找到它在網頁上的所有腳本,如果你不想改變什麼:

document.write('<script type="text/javascript" src="/plugin.js"></script>'); 
(function() { 
    var scripts = document.getElementsByTagName('script'), 
     l = scripts.length - 1; 
    // If you'll check that just after document.write then it should be last script 
    // in the other case you would need to check all scripts. 
    // From src I'm removing domain - at least Safari is returning full URL here 
    if (scripts.length && scripts[l - 1].src && scripts[l - 1].src.replace(/^([a-z]+:\/\/[^\/]*)/i, '') == '/plugin.js') { 
     console.info('success'); 
    } else { 
     console.error('failure'); 
    } 
}()); 
+0

感謝這似乎工作得很好,雖然理想的id像一個解決方案,不會增加額外的標記。 – gunnx

+0

通常,您可以直接將該id添加到腳本標記中,以便不添加測試節點,或者甚至可以檢查其父節點是否包含腳本或以其他方式查找它 – lupatus

+0

是和腳本上的ID屬性是更簡潔的解決方案。你知道是否有任何條件會導致document.write引發異常,或者是try catch沒有意義嗎? – gunnx

0

你可以添加一個臨時變量,或者乾脆注意到現有的,裏面plugin.js的,那麼事後鍵入此變量到控制檯。如果它存在,它會打印它的值,否則它會打印'未定義' - 是否有任何跡象表明它沒有工作?

相關問題