0

1つのページから選択したすべてのテキストを集めるためにChrome拡張機能を開発しています。コンテンツスクリプトを使用して、選択したテキストを取得し、popup.jsに渡して配列に追加し、popup.htmlに表示したので、ユーザーがポップアップをクリックするたびに、選択したテキストが表示されます。Chrome拡張機能の変数値がpopup.jsで更新されていますか?

私が何かを選択すると、popup.htmlはそれを表示しますが、前に選択したテキストはすべて削除されています。配列は常に1の長さを保持します。ポップアップページをクリックするたびにそのページが更新されると思います。

私はそれを理解できなかったので、私を助けますか?私が知りたいのは、ポップアップがそれをクリックするたびに更新される場合、どのように変数を保存するのかです。そうでなければ、私の問題は何時でしょうか。

マイpopup.jsコードは以下の通りです:事前に

var totalSelection = []; 
var selectionDisplay = ''; 

if (chrome.extension.getBackgroundPage().newSelectedText !== undefined) { 
    text = chrome.extension.getBackgroundPage().newSelectedText; 
    addTextInArray(text); 
    addTextToPopup(); 
    if (totalSelection.length > 1) 
     console.log("length: " + totalSelection.length.toString() + "\n" + totalSelection.toString()); 
} 

function addTextInArray(message) { 
    totalSelection.push(message); 
    selectionDisplay += "<p>" + message + "</p>"; 
} 

function addTextToPopup() { 
    document.getElementById("container2").innerHTML = selectionDisplay; 
} 

多くの感謝!

答えて

1

ポップアップページは、再度開くたびに更新されます。彼らはただhtmlファイルです。彼らがバックグラウンドで開かれたままになる理由はありません(それにはbackground pagesがあります)。

次のいずれかを行うことができます:あなたはmanifest.jsonファイルに追加の権限を追加する必要があります。そのため

  • 使用storageを、。バックグラウンドスクリプトの
  • ストアあなたのアレイとは、データ

を渡すためにmessagingを使用します。ユーザーから機密データを収集するときは注意してください。 Googleにはこれに関する厳しいポリシーがあり、拡張機能を公開する予定がある場合は、データを収集していることをユーザーに明確に伝える必要があります。 single purpose policyに準拠していることを確認してください。

+1

また、[localstorage](https://developer.mozilla.org/en/docs/Web/API/Window/localStorage)を使用することもできます。これは 'chrome.storage'よりも簡単です –

+1

ねえ、@ Transcendental @NoamHackerにはお返事ありがとうございました。それは有り難いです。 –

+0

次の質問:変数を格納するために "chrome.storage"を使用する場合は、任意のスクリプトファイル(例:popup.js、background.js、contentScript.js)の変数を設定して取得できますか?変数がどのスクリプトによって定義されても、 "chrome.storage"に入るとすぐに、それはどのファイルでも利用できますか? –

関連する問題