1

アプリケーションにサードパーティのコードを含めていますが、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を追加してから、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内に一時変数を追加するか、既存の変数をメモしてから、この変数をコンソールに入力することができます。存在する場合はその値を出力し、存在しない場合は「未定義」を出力します-機能していないことを示すものはありますか?

于 2013-02-05T11:03:16.397 に答える