1

私はこれら3つのファイル popup.html を持っている簡単な質問を得ました:

<script>
    function buttonClicked(button) 
    {
        chrome.extension.sendRequest({command:button.id});
    }
</script>
    <input style="width:100%" type="button" value="Click me" id="click" onclick="buttonClicked(this)"/><br/>

background.html :

<script>
    function processRequest(request, sender, sendResponse) 
    {
        alert('hi');
        sendResponse({});
    }
    chrome.extension.onRequest.addListener(processRequest);
</script>

および contentscript.js

s = document.getElementsByClassName('st');
if (s[0].innerText != '') { 
st = new Array(); 
for (i = 0;i<s.length;i++) {
    st[i] = s[i].innerText;
}
chrome.extension.sendMessage({"message" : st}, function(response) {});
}

ポップアップページのボタンをクリックするたびに contentscript を起動したいのですが、何らかの理由で contentscript のスクリプトが background.html でも popup.html でも機能しないのですか?

ありがとうございました

4

1 に答える 1

2

解決策とそれを使用する理由をコメントで 3 回説明しようとしました。あなたはそれを理解していないので、コードを参照してもう一度説明します。

現れる

  • インライン スクリプトを外部ファイルに移動しますpopup.js
  • インライン イベント リスナーを削除し、 に移動しpopup.jsます。

popup.js

function buttonClicked(button) {
    chrome.extension.sendRequest({command: button.id});
}
document.getElementById('click').addEventListener('click', function() {
    buttonClicked(this);
});

popup.html

<script src="popup.js"></script>
<input style="width:100%" type="button" value="Click me" id="click"><br>

前のコードをテストすると、機能しないことがわかります。これは、 の内容がpopup.jsボタンの前に実行されるためです (が作成されたに発生します) <script src>。これは 2 つの方法で解決できます (両方ではなくいずれかの方法を使用します)。

  • 推奨:<script src="popup.js"></script>の終了</body>タグの前に配置しpopup.htmlます。次に、スクリプトの実行時にすべての要素が存在することを確認します。
  • 別の方法: イベント リスナーの呼び出しをイベントにラップしますDOMContentLoaded

    document.addEventListener('DOMContentLoaded', function() {
        document.getElementByUd('click').addEventListener( ... );
    });
    

背景ページ。

利用可能なオプションの詳細については、この回答の中央を参照してください。

  • マニフェスト ファイルを変更します"background": {"scripts": ["background.js"]}
  • に名前を変更background.htmlし、ファイルからおよびbackground.jsを削除します。<script></script>
于 2012-08-12T14:06:38.760 に答える