0

オプション ページで新しいオブジェクトを作成するときに「小さな」問題が発生します。

オプション ページで、いくつかのオブジェクトを作成し、それらを一般設定として保存します。これらのオブジェクトには、さまざまな API と通信する方法があります。しかし、それらのオブジェクトの 1 つを操作するようになるとすぐに、現在のページのコンテキストが失われます。

例えば:

オプション ページ メソッド 'request' を持つオブジェクトを作成し、このメソッドを使用して ajax リクエストを API に送信します。他のページでこれを呼び出すと、ajax リクエストがオプション ページに記録されます。オプション ページを閉じると、作成されたログのすべてのコンテキストが失われます。

現在のページへのコンテキスト参照を強制する方法はありますか? または、間違ったページにオブジェクトを作成/保存して、それらを必要とするページでそれらを取得するのを間違えましたか? (IEは、ページ自体にオブジェクトを作成するために必要なデータのみを保存する必要がありますか?(これは同じことのオーバーヘッドがかなりあるようです(?))。

前もって感謝します。

編集

オブジェクトを作成するオプション ページがあり、それを MyApi と呼びます。新しい MyApi を作成し、 chrome.storage.local に保存します。ユーザーがいくつかのテキストを選択してコンテキスト メニューをクリックすると、選択したテキストを表示する新しいページ (selectedText.html) が開き、いくつかの API 呼び出しが行われます。これは主に ajax 要求です。selectedText.html のストレージからオブジェクトを取得し、MyApi でリクエストを行った瞬間、ajax リクエストのネットワーク タブにもコンソール ログにもログが表示されません。しかし、オプションページを開くと、そこにすべてが表示されます。

EDIT2

save : function()
{
    var obj = {'api':this.data};
    chrome.storage.local.set(obj,function() { if(chrome.runtime.lastError) console.warn(chrome.runtime.lastError); });
}

これはバックグラウンド スクリプトにあります。

4

1 に答える 1

0

あなたはこの方法であなたが望むものを達成することができます:

  1. バックグラウンドページでオブジェクト/関数/何でも定義します。
  2. chrome.runtime.getBackgroundPage()を使用して、背景ページwindowオブジェクトを保持します。
  3. ローカル コンテキストのオブジェクトを引数として渡して、目的のメソッドを実行します。(もちろん、そのような引数を受け入れて利用するには、関数を変更する必要があります。)

例:

background.js で:

function myFunc(winObj, msg) {
    winObj.console.log(msg);
}

otherPage.js では:

chrome.runtime.getBackgroundPage(function(bgPage) {
    bgPage.myFunc(window, "This will be logged in 'otherPage.html' !");
});

それは最もクリーンな解決策ではありませんが、うまくいくかもしれません...

于 2013-11-10T21:13:02.363 に答える