Chrome拡張機能 - 現在のタブのテキストコンテンツ全体を取得する 質問する

Chrome拡張機能 - 現在のタブのテキストコンテンツ全体を取得する 質問する

私は、現在のタブのテキスト コンテンツ全体を取得する必要がある拡張機能を開発しています。現在、現在のタブから選択したテキストを取得するプラグインがあります。つまり、本質的には、その ctrl-A バージョンを探しています :)。これは、@Derek からヒントを得て、これまでに行ったことです。

これは私のイベント ハンドラー内にあります (これは 1 つだけであり、他にもリスナーなどがありますonUpdated)。

chrome.tabs.onSelectionChanged.addListener(function(tabId,changeInfo,tab) {
  chrome.tabs.getSelected(null,function(tab) {
    chrome.tabs.sendRequest(tab.id, {method: "getSelection"}, function (response) {
      selectedtext = response.data;
    });
    chrome.tabs.sendRequest(tab.id, {method: "getText"}, function (response) {
      alltext = response.data;
    });
  });
});

コンテンツ スクリプトに書いた内容は次のとおりです。

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
  if (request.method == "getSelection")
    sendResponse({data: window.getSelection().toString()});
  else if (request.method == "getText")
    sendResponse({data: document.body.innerText});
  else 
    sendResponse({});
});

しかし、 はdocument.body.innerTextundefined を返します。 の現在のタブのテキスト全体が必要ですalltext。誰かこれを手伝ってくれませんか? ありがとうございます。

ベストアンサー1

document.body.innerTextまたはを使用document.all[0].innerTextして、コンテンツスクリプト
それはすべてを取得しますテキストコンテンツページ内に HTML コードなしで表示されます。

document.all[0].outerHTMLまたは、ページ全体の HTML を取得するためにも使用できます。


コンテンツスクリプト

function getText(){
    return document.body.innerText
}
function getHTML(){
    return document.body.outerHTML
}
console.log(getText());             //Gives you all the text on the page
console.log(getHTML());             //Gives you the whole HTML of the page

追加した

コンテンツスクリプトは、文章ポップアップに追加できます。以下を使用できます:

  • chrome.tabs.getSelectedタブを選択するには、
  • chrome.tabs.sendRequestコンテンツスクリプトにリクエストを送信するには、
  • chrome.extension.onRequest.addListenerリクエストに耳を傾けます。

ポップアップページ

chrome.tabs.getSelected(null, function(tab) {
    chrome.tabs.sendRequest(tab.id, {method: "getText"}, function(response) {
        if(response.method=="getText"){
            alltext = response.data;
        }
    });
});

コンテンツスクリプト

chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) {
        if(request.method == "getText"){
            sendResponse({data: document.all[0].innerText, method: "getText"}); //same as innerText
        }
    }
);

これでうまくいくはずです。

おすすめ記事