0

私はChrome拡張機能を書いています。URLがオンラインかどうかも確認する必要があります。URL は変数を返すので、var が true の場合、URL はオンラインです。

URL がオフラインの場合、エラーが発生するまでに約 2 秒かかるため、拡張機能のポップアップが毎回開始されるまでに 2 秒かかります。

これは私の「古い」バージョンです:

popup.html:

<script language="javascript" src="http://example.org/jdcheck.js"></script>
<script language="javascript" src="popup.js"></script>

popup.js:

if (variable) { [...] }

まあ、それはうまくいきました-2秒後。

アイデアが浮かんだので、popup.html の scriptlink を削除しました。これが私の新しい popup.js です。

background.$(document).ready(function() {


      var jq = document.createElement('script'); jq.type = 'text/javascript';
      jq.src = 'http://127.0.0.1:9666/jdcheck.js';
      document.getElementsByTagName('head')[0].appendChild(jq);

  if(jdownloader){
         [...action]
  }  
});

ご覧のとおり、jQuery を使用して Checkfile をロードします。

今、それは私にエラーをスローします:

Uncaught ReferenceError: jdownloader is not defined 

createElement が機能しなかったようです。URL から必要な変数が得られることは 100% 確信しています。

手伝っていただけませんか?これを解決する方法がわかりません..

ありがとうございました!マーカス


編集: jQuery の部分を削除し、keepGoing と jq.onload を追加しました:

    function keepGoing() {

      console.log("JS should have been loaded");

      if(jdownloader){

        [action]
      }  
    }  

      var jq = document.createElement('script');
      jq.onload = keepGoing();
      jq.src = 'http://127.0.0.1:9666/jdcheck.js';
      document.getElementsByTagName('head')[0].appendChild(jq);

今、コンソールは私にこれを与えます:

JS should have been loaded popup.js:98
Uncaught ReferenceError: jdownloader is not defined popup.js:100

そのため、jdownloader var が popup.js に渡されていないようです。なぜ..なぜ?! 知らない。

マーカス

4

3 に答える 3

2

スクリプト タグを DOM に追加すると、コードはブラウザがスクリプトをダウンロードして評価するのを待たずに続行します。

だから、あなたは戻ってチェックする必要があります。Chrome では、要素でloadイベントを使用できます。script

background.$(document).ready(function() {

    var jq = document.createElement('script'); jq.type = 'text/javascript';
    jq.onload = keepGoing; // Or an anonymous inline function if you prefer
    jq.src = 'http://127.0.0.1:9666/jdcheck.js';
    document.getElementsByTagName('head')[0].appendChild(jq);

    function keepGoing() {
        if(jdownloader)...
    }  
});

(「Chrome で」というのは、古いバージョンの IE ではイベントがscript発生せず、発生したためです。)loadreadystatechange


補足:typeの場合、属性を指定する必要はありませんtext/javascript。これがデフォルトであり、これまでもそうでした。

于 2013-10-04T11:26:42.663 に答える