0

Googleグループのトピック検索の結果を表示する必要があるChrome拡張機能を構築しています(ページのURLはhttps://groups.google.com/forum/?fromgroups=#!searchin/opencomments-site-discussions/subjectです:{いくつかのトピック}そして私は特定のクラス名を探すことによって一致するかどうかを知ることができます)。残念ながら、探しているフィールドは、ページのJavascriptが実行されるまで作成されないため、ページから生のHTMLを単純に見ることはできません。

try {
  var request = new XMLHttpRequest();
  request.open("GET", url, false);
  request.send(null);
} catch (e) {
  ....
}
if (request.status == 200) {
  var rawText = request.responseText;
  ...
}

ページを表示せずに、Javascriptの実行を含むページ全体をロードできるかどうか誰かが知っていますか?この問題で私の髪を引っ張っています。

4

1 に答える 1

1

offscreenTabsAPI(現在は実験的)をご覧ください。
を使用してタブを作成した後、またはをchrome.experimental.offscreenTabs.create使用して、好きなことを行うことができます。chrome.tabs.sendMessagechrome.tabs.executeScript

インスピレーションが必要な場合は、この完全なデモを確認してください。

仕様により、オフスクリーンタブは実際のタブ内でのみ作成できます(そうしないと、「experimental.offscreenTabs.create中にエラーが発生します:現在のタブが見つかりません」)。他のデモでは、この目的のためにオプションページを使用しました。このようなページを使用したくない場合は、を使用して新しいタブを作成し、必要な操作を行ってからchrome.tabs.create、を使用window.close()してタブを閉じます。

したがって、結局(非表示の)タブを開くことになります(ただし、ページ自体は表示されません)。現在のAPIでは、タブを開かずに非表示のタブをレンダリングする方法は他にありません(バックグラウンドページのiframeでページをレンダリングする場合を除く...)。実際のタブがタブバーに表示されてもかまわない場合は、を使用してchrome.tabs.create({active:false, url:'...'})ください。タブをユーザーに本当に見えないようにすることが重要な場合は、次のデモに進みます。

offscreenTabsAPIを使用したデモ

この例では、非表示のタブのタイトルを含むアラートを表示します。コンテンツスクリプトからこのアラートをすぐに表示できますが、代わりに、データをバックグラウンドページに渡して、機能をデモンストレーションします。

バックグラウンドスクリプト(background.js):

 chrome.extension.onMessage.addListener(function(message, sender, sendResponse) {
     var tab = sender.tab;
     if (tab && tab.index === -1) { // <-- Detect offscreen tab
         if (message.method == 'title') {
             // Close helper tab:
             chrome.extension.sendMessage({method: 'finishedTab', id: tab.id});
             alert('Got title from ' + tab.url + ' :\n' + message.result);
         }
     }
 });

 chrome.browserAction.onClicked.addListener(function() {
     chrome.tabs.create({
        active: false,
        url: chrome.extension.getURL('launcher.html')
     });
 });

コンテンツスクリプト(contentscript.js):

chrome.extension.sendMessage({
    method: 'title',
    result: document.title
});

launcher.htmlが含まれています<script src="launcher.js"></script>launcher.js

var offscreenTabId;
// Close the tab when the stuff is done
chrome.extension.onMessage.addListener(function(message) {
    if (message.method == 'finishedTab' && message.id === offscreenTabId) {
        window.close();
    }
});
// Create invisible tab
var createProperties = {url: "https://stackoverflow.com/"};
chrome.experimental.offscreenTabs.create(createProperties, function(offscreenTab) {
    offscreenTabId = offscreenTab.id;
});

マニフェストファイル:

{
    "name": "Get information from DOM in an invisible tab",
    "description": "See https://stackoverflow.com/q/13714002",
    "version": "1",
    "manifest_version": 2,
    "permissions": ["experimental", "<all_urls>"],
    "background": {"scripts": ["background.js"] },
    "content_scripts": [{
        "js": ["contentscript.js"],
        "matches": ["<all_urls>"]
    }],
    "browser_action": {}
}
于 2012-12-05T00:04:55.460 に答える