2016-09-21 19 views
0

クロムエクステンションはcontent_scriptsです。私はjqueryのを使用してDOMに新しい要素を追加していますページのロード時:onClickクロムエクステンションを使用

urlTarget.parent().prepend("<div class='scout status' onClick='test()' data-domain='" + domainKey + "'></div>");

これが正常に動作します。私はChrome拡張機能フレームワークにセキュリティ制限について読んでてきた

Uncaught ReferenceError: test is not defined

(参照:私は次のエラーを取得する付加さの要素をクリックした後

function test() { 
    alert("this is test"); 
    return false; 
} 

:私もinject.jsコンテンツスクリプト内の関数を定義しましたdocs)、コンテンツスクリプトにも適用されているかどうかは分かりません(ドキュメンテーションはポップアップの例です)。あなたがDOMに新しい要素を追加し、onClick=XXXを経由してイベントリスナーを登録すると

答えて

1

、実際にブラウザがXXXがページのスクリプトからのものであることを期待しています。しかし、content scripts are isolatedを知っていれば、ページによって作成された変数/関数に直接アクセスすることはできず、その逆もありません。

  1. // Assuming the id is ID 
    document.getElementById('ID').addEventListener('click', test); 
    
  2. がにscriptタグを追加し、以下の方法を介してコンテンツ・スクリプトに挿入された要素のためのidを追加し、バインドイベントリスナー:だからここ

    は、2つの回避策が来ますページ(Insert code into the page context using a content script

    var actualCode = ` 
        function test() { 
        alert("this is test"); 
        return false; 
        } 
    `; 
    
    var script = document.createElement('script'); 
    script.textContent = actualCode; 
    (document.head||document.documentElement).appendChild(script); 
    script.remove(); 
    
+0

ありがとう、スクリプトの動作について説明します。実際に私の目的は、インジェクションスクリプトの内部から関数を動的に呼び出すことです。動的には、呼び出される関数の名前を持つデータ属性値を含む追加された要素をクリックすると、この関数を "string"から呼び出すことができます。 'onClick'の代わりに' eval() 'も試しましたが、効果は同じです。 –

関連する問題