0

にアクセスすることはできませんグローバルな空間を汚染している。この閉鎖は__MyGlobalとしましょう。これは期待通りに実行されます。web_accessible_resourcesは、私はからそれを防ぐために閉鎖に配置されたファイルから<strong>requirejs</strong>のインスタンスをロードするために<strong>chrome.tabs.executeScript</strong>を使用して拡張を開発していchrome.tabs.executeScript

次に、chrome.tabs.executeScriptを使用して、同じタブでコードを実行します。このコードは基本的な__MyGlobal.require([依存関係]、function(){})コールです。これは期待通りに実行されます。

__MyGlobal.declare()呼び出しで失敗するのは、そのRequire呼び出しの依存関係です。

エラーはです。キャッチされていないReferenceError:__MyGlobalが定義されていません。私はコンソールで__MyGlobalを入力した場合


テストは、さらにそれが定義されていません。 ドメインを自分の内線番号に変更すると、コンソールに__MyGlobalが期待通りに表示されます。私はchrome.tabs.executeScript負荷require.js

  • chrome.tabs.executeScriptが必要()文をロードする方法を

    短い

    1. わからない

      enter image description here

      依存関係あり

    2. require()ファイル依存関係load(web_accessible_resourcesで宣言されています)
    3. が必要()の依存性は、独自の依存関係を(ステートメントを定義)
    4. 文はコードchrome.tabs.executeScriptをロードし、web_accessible_resourcesとしてロード私は得ることができる方法requirejs

    にアクセスすることはできません定義されていました一緒に素敵な演奏ですか?彼らは別のドメインにいますか?ありがとう!

  • +0

    コンテンツスクリプトは[隔離された世界](https://developer.chrome.com/extensions/content_scripts#execution-environment)で実行されます。私はあなたが[scriptTagContext](https://github.com/Rob--W/chrome-api/tree/master/scriptTagContext)ライブラリを使う方が簡単だと思います。 – wOxxOm

    +0

    私はコンテンツスクリプトを実行していません。 –

    +1

    executeScriptはコンテンツスクリプトを実行します。 – wOxxOm

    答えて

    1

    chrome.tabs.executeScriptが挿入されたスクリプトは「コンテンツスクリプト」であり、ウェブサイトとは異なる独自のJavaScript環境で実行されます。彼らはウェブサイトと同じDOMとやりとりします。

    requirejsは依存関係を読み込むためのスクリプトタグを作成することで動作します。したがって、requirejsによって読み込まれたスクリプトは、拡張機能のjavascript環境ではなく、ページのjavascript環境に読み込まれます。

    クロムエクステンション環境の分離方法についてもっと詳しく読むことができますhere. Programmatic-Injection and Execution-Environmentは、クロムの最も基本的な開発より多くのことを読んだりする価値があります。

    requirejsが独自のjavascript環境でコンテンツスクリプトとして実行されている場合、requirejsを使用してrequirejsをロードするには、require.jsファイルの末尾にwOxxOm (source here)という次のサンプルを追加できます。

    var legacyLoad = requirejs.load; 
    requirejs.load = function(context, moduleName, url){ 
        if(location.protocol === 'chrome-extension:'){//works for extension pages 
         legacyLoad(context, moduleName, url);   
        } 
        else {//works for content scripts 
         var x = new XMLHttpRequest(); 
         x.open('GET', url); 
         x.onload = function() { 
          if (x.status === 200) { 
           // Run script in the current global context. 
           try { 
            window.eval(x.responseText); 
           } 
           finally { 
            context.completeLoad(moduleName); 
           } 
          } 
          else context.onScriptError(new Event('error')); 
    
         }; 
         x.onerror = function() { 
          ontext.onScriptError(new Event('error')); 
         }; 
         x.send(); 
        } 
    } 
    
    関連する問題

     関連する問題