6

別のドメインのローカル ストレージに書き込むにはどうすればよいですか。アイデアは、ローカルストレージに何かを書き込むためにクロム拡張機能が必要であり、ユーザーが関連する Web サイトにアクセスすると、サイト site がローカルストレージのコンテンツを読み取ることができるということです。ユーザーの個人データをサーバーに保存せずに同期しようとしています。

4

2 に答える 2

8

コンテンツ スクリプトは、ページの localStorage に直接アクセスできます。

特定のドメインの値を保存する場合は、ウィンドウまたはフレームを開いてから、ウィンドウ/ページのローカル ストレージに書き込みます。

  1. お気に入りのオプションを選択して、ページを有効にします。

    • chrome.tabs.createを使用して見つかった非アクティブなウィンドウに、非アクティブなタブを作成しますchrome.tabs.query
    • 実験的なoffscreenTabsAPI (実験的であるため、本番環境で使用する準備はできていません)。私が SO に投稿したのいくつかを参照してください。
    • IFrame を作成し、現在のページに挿入します。
    • window.open(お勧めしません...)

    ページを開くことにしたときは、軽量なページを選択してください。/robots.txtほとんどのサイトに存在しプレーン テキスト ファイルです。

  2. ページのコンテンツ スクリプトをアクティブにします。マニフェスト ファイルを使用してメッセージングAPI を利用するかchrome.tabs.create、コンテンツ スクリプトをプログラムで挿入するメソッドにコールバックを追加することができます ( chrome.tabs.executeScript)。

簡単な例を次に示します。tabsを使用しているため、APIが必要ですchrome.tabs.executeScript。さらに、アクセスしたいオリジンも権限リストに追加する必要があります。

chrome.tabs.create({
    active: false,
    url: 'http://stackoveflow.com/robots.txt'
}, function(tab) {
    chrome.tabs.executeScript(tab.id, {
        code: 'localStorage.setItem("key", "value");'
    }, function() {
        chrome.tabs.remove(tab.id);
    });
});
于 2013-03-08T10:45:51.190 に答える
2

これを行う唯一の解決策は、クロスドメインの制限のためにスクリプトインジェクションを介することだと思います。

var s = document.createElement('script');
s.src = chrome.extension.getURL("script.js");
s.onload = function() {
    this.parentNode.removeChild(this);
};
(document.head||document.documentElement).appendChild(s);

script.js他のサイトlocalStorageにアクセスする拡張機能にファイルを追加script.jsします。マニフェストファイルの「web_accessible_resources」に追加する必要があります。

スクリプトが完全にロードされると、スクリプトは自動的に削除されることに注意してください。実行するコードが自己実行可能関数に含まれていることを確認してください。

于 2013-03-08T08:39:57.820 に答える