2016-04-17 13 views
0

クロムエクステンションをビルドしています。 コードのこの部分では、ロードされたページの段落を見つけようとしています。段落内の各段落のIDロードと詳細については、findCheckedFactの値がその段落の内側にあるかどうかを調べます。クラスレッド。javascript関数のパラメータをchrome.tabs.executeScript内に渡します。

findCheckedFactは文字列です。ここでは+'console.log("Print:", str_p, " Fact:", findCheckedFact);'に段落内のテキストが定義されていますが、パラメータfindCheckedFactは定義されていないので、パスできません。 この関数はfindTextInsideParagraphs("test");を呼び出そうとしました。

function findTextInsideParagraphs(findCheckedFact){ 
     chrome.tabs.executeScript({file: "js/jquery-1.12.0.min.js"}, function() { 
      chrome.tabs.executeScript({"code": 
       '(function(findCheckedFact){' 
        +'$("#lead, #detail").find("p").each(function() {' 
          +'var str_p = $(this).text();' 
          +'console.log("Print:", str_p, " Fact:", findCheckedFact);' 
          +'if (str_p.indexOf(findCheckedFact) >= 0) {' 
           +'console.log("Yes kest");' 
           +'$(this).html($(this).html().replace(findCheckedFact, "<span class=\'red\'> $& </span>"));' 
          +'}' 
        +'});' 
       +'}(' + JSON.stringify("Fact: " , findCheckedFact) + '));' 
      }); 
     }); 

} 

この関数はfindTextInsideParagraphs( "test")を呼び出してみました。 manifest.jsonをインサイド 私はそれを動作させるためにeverythin可能性を追加しました:

"content_scripts": [ 
    { 
     "matches": [ 
     "<all_urls>", 
     "http://*/*", 
     "https://*/*" 
     ], 
     "css": [ 
     "custom-css.css" 
     ], 
     "js": [ 
     "js/jquery-1.12.0.min.js" 
     ], 
     "run_at": "document_start" 
    }], 
    "background": { 
    "persistent": false, 
    "scripts": [ 
     "js/jquery-1.12.0.min.js", 
     "background.js", 
     "popup.js", 
     "blic-fact-checker.js" 
    ], 
    "css":["custom-css.css"] 
    }, 
    "permissions": [ 
    "background", 
    "notifications", 
    "contextMenus", 
    "storage", 
    "tabs", 
    "activeTab", 
    "http://localhost:5000/*", 
    "chrome-extension://genmdmadineagnhncmefadakpchajbkj/blic-fact-checker.js", 
    "chrome-devtools://devtools/bundled/inspector.html?&remoteBase=https://chrome-devtools-frontend.appspot.com/serve_file/@202161/&dockSide=undocked", 
    "http://*/*", 
    "https://*/*", 
    "<all_urls>" 
    ], 

誰かが本当に私は何が起こっているのを見つけることができない、これで私を助けることができますか?ご覧のとおり

答えて

1

まず、this explanation of different kinds of javascript code in Chrome extensions

を読んで、executeScriptであなたのコードは、コンテンツスクリプトであり、それは背景や他の適切な拡張ページ内のコードへの直接アクセスを持っていません。あなたは3つの主な選択肢があります:

1)sendMessageまたはport.postMessageというコンテンツスクリプトにあなたのFindCheckedFactを送ります。もちろん、コンテンツスクリプトでは、それらのリスナーを作成し、実際のコードをこれらのリスナーに配置する必要があります。

2)変数をローカルストレージまたは同期ストレージに保存し、executeScriptをコールバックに入れて、コンテンツスクリプトから読み込みます。場合によっては再読み込みする必要がある場合は、コンテンツスクリプトのストレージ変更のリスナーを設定します。

これらのソリューションは、.jsファイルのコンテンツスクリプトとインラインコンテンツスクリプトの両方で動作します。しかし、あなたがインライン化を選択し、あなただけの値に一方向に送信する必要があるため、あなたがすることができます

3)自分のFindCheckedFact()JSON.stringifyかのtoStringとを文字列化、および+で、その値を挿入します。

chrome.tabs.executeScript({"code": 
      '(function('+strFindCheckedFact+'){' 

など

関連する問題