1

我在我的应用程序中包含了一些第 3 方代码,我看到它使用了包含在 try..catch 语句中的 document.write() 代码。document.write() 不返回任何内容,所以我想知道是否有办法测试 document.write() 是否成功,以便我可以测试捕获错误。例如,我尝试包含此脚本异步,但这停止了 document.write() 部分的执行,但它没有运行 catch() 部分中的代码。

示例代码:

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

2 回答 2

3

您可以将 id 添加到 script 标签,然后通过 id 从 DOM 中获取它:

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');
    }
}());
于 2013-02-05T11:04:06.880 回答
0

你可以在 plugin.js 中添加一个临时变量,或者简单地记下一个现有的变量,然后在控制台中输入这个变量。如果它存在,它会打印它的值,否则它会打印'undefined' - 是否有任何迹象表明它没有工作?

于 2013-02-05T11:03:16.397 回答