2017-07-02 24 views
0

コンソールでは、document.getElementById( '...')を入力して値を取得できます。または.textContentさえ、私​​が望む文字列を取得します。Chrome拡張機能 - Document.getelementbyId(...)がnullに評価されていますか?

これを私のクロムエクステンションにポップアップして実行すると、document.getElementById( '...')をnullとして評価します。どうしたの?

manifest.jsonを:

{ 
    "name": "CSUF RMP", 
    "version": "0.1", 
    "manifest_version" : 2, 
    "description": "Displays professor ratings on icon click", 
    "background" : { 
    "scripts" : ["background.js"] 

    }, 
    "browser_action": { 
    "default_icon": "icon16.png" 
    }, 

    "content_scripts": [ 
     { 
      "matches": ["https://mycsuf.fullerton.edu/*"], 
      "js": ["script.js"] 

     } 
    ], 

    "permissions": ["<all_urls>", "*://*/*", "http://*/*", "https://*/*"] 
} 

Background.js:

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(null, {file: "script.js"}); 
}); 

私script.jsは私が一番上に掲載するもの文字通りです。スクリプトはウェブページのDOMにアクセスする必要があるため(コンテンツスクリプトが必要です)、アイコン(したがって、background.js)をクリックして実行します。

私はページを実行してアラートを表示できますその行はページのDOMを評価していません。ただnullです。

+0

'document.getElementById( '...')' - 本当ですか?私はIDが値として "..."を持つことができないと思った –

答えて

0

私はあなただけで、通常のスクリプトのようscript.jsを実行している、通常のスクリプトがページDOMと対話することはできません

、私はここでの問題が何であるかを知っていると思う、あなただけのようにそれについて考えることができますファイルからスクリプトを実行すると、コンテンツスクリプトの権限はそのようにはありません。

あなたができることは、(コンテンツスクリプトのURLを使って)新しいタブを開き、その新しいタブのコンテンツスクリプトに特定の機能を実行するように指示するメッセージを渡すことです。

あなたが好きなものにコンテンツスクリプトのonloadイベントを設定することにより、メッセージ送信使用せずに、それをテストすることができます:onload=alert(document.getElementById('...'));と背景ページから新しいタブを開くよりもを:chrome.tabs.create({"url":"https://mycsuf.fullerton.edu"});

は、それが:)

をどのようになる教えてください

編集:新しいタブを開いてその内容をテストするには、マニフェストファイルに 'tabs'権限が必要であることを忘れてしまいました。

+0

これは新しい一杯のタブを意味しませんか?私はbackground.jsのコードの実行のためにあなたが言っていることを知っている、それはコンテンツスクリプトとして実行されていない(従ってDOMアクセスはない)。ですから、アイコンがクリックされたときにbackground.jsにmsgを送信させる必要があります(今はスクリプトを実行します)。その後、msgは私のコンテンツスクリプトscript.jsによっていくつかのイベントリスナで取得されます。次に、それは現在「本当の」内容のスクリプトです。右? – Kevin

+0

正確です。メッセージの送信はちょっと面倒なので、新しいタブを開いてコンテンツスクリプトを実行させるだけで、これをもっと早く確認したいと思っていたかもしれません。 – HUCK45

+0

新しいタブの意味を説明できますか?リテラルタブがブラウザで開かれるようになっていると私は理解しています。 ---私の目標は、mycsuf.fullerton.edu * ....ページを持っていることです。私は拡張子アイコンをクリックすることができます(それがポップアップするかもしれません)。そしてそのページで私はDOMを編集することができます。私はそれを1ページに含めることを望みます。私の電話でも、私はこれをすべてコーディングしたいと思いますが、それはsendmess(executecriptではなく)を使うことができ、コンテンツスクリプトとして動作し、background.jsでなくdomにアクセスできることを意味します。それがそうだったスクリプト(DOMアクセスなし)? – Kevin

関連する問題