2016-10-29 10 views
1
私は https://robots.thoughtbot.com/how-to-make-a-chrome-extensionに基づいクローム拡張を作成しました

で働いていない私は2つの変更を加えたjQueryのオフ()クローム拡張

(完成ファイルのため終わりを見て)。私はJQuery 3.1.1を上記のページで与えられた古いものの代わりに最小化したものを使用しました。

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
     if(request.message === "clicked_browser_action") { 
      $(document).off("touchmove mousewheel mousemove scroll"); 
     } 
    } 
); 

私は開かれた適切なテストページで拡張機能のボタンをクリックすると、$(文書).off()コマンドが動作していない:私はcontent.jsを変更しました。それはエラーを出さず、何もしません。

私はチェックしました。私が影響を与えたいページのコンソールに$(document).off("touchmove mousewheel mousemove scroll");と入力すると正常に動作します。拡張機能で実行されている場合はそうではありません。

documentが内線で正しいことを確認しようとしました。document.domainは、内線番号(およびページ上のコンソール)でブレークポイントにチェックインすると正しい結果が得られます。

jQuery._data(jQuery(document)[0]).events["touchmove"](と "mousewheel"、 "mousemove"、 "scroll")をチェックして、コンソールで動作しますが、拡張機能をブレークポイントするとエラー(Cannot read property 'touchmove' of undefined)が表示されます。私はさらにチェックすると、jQuery._data(jQuery(document)[0])は以下を与える:コンソールで

ブレークポイントで
Object 
    events: Object 
    handle: function (e) 
    __proto__: Object 

Object 
    __proto__: Object 

私はjQueryのがアクセス可能であることを、例えばいくつか他のものを(試してみました作業など)。

誰でも手助けできますか?

+0

コンテンツスクリプトで追加したイベントリスナー、またはページスクリプトに既に存在するイベントリスナーを無効にしようとしていますか(ウェブページの一部)?あなたがオフにしようとしているイベントがページスクリプト内にあるように思えます。 – Makyen

+0

私は、ページスクリプトに既に存在するイベントリスナーをオフにしようとしています(つまり、ウェブページの一部です)。 –

答えて

2

コンテンツスクリプトは、ページスクリプト(ウェブページに既に存在するスクリプト)とは異なるコンテキスト/スコープにあります。ページスクリプトコンテキストでコードを実行するには、ページのDOMに<script>要素を作成して挿入します。

あなたはにあなたのコードを変更することができます:それはDOMで<script>要素が今あるので

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
     if(request.message === "clicked_browser_action") { 
      let newScript = document.createElement('script'); 
      newScript.innerHTML='$(document).off("touchmove mousewheel mousemove scroll");'; 
      document.head.appendChild(newScript); 
     } 
    } 
); 

追加スクリプトが実行されます。ブラウザは、<script>要素が追加されたことを認識し、それを挿入したスクリプトが処理しなくなったらすぐに評価します(含まれているコードを実行します)。基本的にDOMに追加する他の要素についても同じことをします。それがページの一部であるため、<script>のコードはページスクリプトコンテキスト/スコープで実行されます。

+0

すごい!確かにうまくいくようですが、私はまもなく答えとしてマークします(ただし、$(document)行の引用符を編集することもできます)。挿入されたスクリプトが実際にどのように実行されるのか混乱してしまうかもしれませんが(それはありますが、なぜですか?)...明確にすることはできますか? –

+1

固定。私はあまりにも多くのマークダウン編集をしてきました。それはページ内の '

関連する問題