Tab オブジェクトから Document オブジェクトの取り出し方がいまいち分かりません。
カレントウィンドウのすべてのタブのソースを取り出したいと思っています。
各 Tab オブジェクトの URL やタイトルは簡単に取り出せるのですが、
リファレンスなどを見ても、Document オブジェクトの取り出し方が分かりませんでした。
まず、Background PageかPopupなどでJavaScriptを実行している(permissionsにtabsは追加済)ということで良いでしょうか?
「Document オブジェクトの取り出し方」ですが、基本的には不可能です。一応、同じ拡張同士が実行しているコンテキストのみであれば直接グローバルオブジェクトを参照できるAPI(chrome.extension.getViews)はありますが、今回のケースには合わないかと思います。
基本的に、拡張のプロセスと表のプロセスは独立している(異なる拡張同士も同様)ので、直接参照し合うようなことはできません。そのかわりにchrome.extension.sendRequest、chrome.extension.onRequest.addListenerを使って(内部的にはJSONを使って)メッセージをやり取りする必要があります。
ただ、ソースを取り出したいというケースでは、バックグラウンドページからXMLHttpRequestでレスポンスを取得するか、chrome.tabs.executeScriptなどでContentScriptsを実行してdocument.documentElement.outerHTMLから取得したソースをsendRequestでバックグラウンドに送り返す方法などが考えられます。どちらにしても、permissionsに通信先のホストを追加する必要あります。
URLの頭にview-source:を付ければソースコードを表示することができます。
view-source:http://www.google.co.jp/
冗談で言ってるんですよね?
まず、Background PageかPopupなどでJavaScriptを実行している(permissionsにtabsは追加済)ということで良いでしょうか?
「Document オブジェクトの取り出し方」ですが、基本的には不可能です。一応、同じ拡張同士が実行しているコンテキストのみであれば直接グローバルオブジェクトを参照できるAPI(chrome.extension.getViews)はありますが、今回のケースには合わないかと思います。
基本的に、拡張のプロセスと表のプロセスは独立している(異なる拡張同士も同様)ので、直接参照し合うようなことはできません。そのかわりにchrome.extension.sendRequest、chrome.extension.onRequest.addListenerを使って(内部的にはJSONを使って)メッセージをやり取りする必要があります。
ただ、ソースを取り出したいというケースでは、バックグラウンドページからXMLHttpRequestでレスポンスを取得するか、chrome.tabs.executeScriptなどでContentScriptsを実行してdocument.documentElement.outerHTMLから取得したソースをsendRequestでバックグラウンドに送り返す方法などが考えられます。どちらにしても、permissionsに通信先のホストを追加する必要あります。
説明不足で申し訳ないです。
前提とされてることの通り、Popup で、かつ tabs は追加済みでやってます。
やっぱり XMLHttpRequest あたりで取り直すしかないんですね。
ソースを解析したいサイトは固定で決まっているので、permissions いじって XMLHttpRequest でひっぱってこようと思います。
詳しいご説明ありがとうございました!
説明不足で申し訳ないです。
前提とされてることの通り、Popup で、かつ tabs は追加済みでやってます。
やっぱり XMLHttpRequest あたりで取り直すしかないんですね。
ソースを解析したいサイトは固定で決まっているので、permissions いじって XMLHttpRequest でひっぱってこようと思います。
詳しいご説明ありがとうございました!