別のドメインのローカル ストレージに書き込むにはどうすればよいですか。アイデアは、ローカルストレージに何かを書き込むためにクロム拡張機能が必要であり、ユーザーが関連する Web サイトにアクセスすると、サイト site がローカルストレージのコンテンツを読み取ることができるということです。ユーザーの個人データをサーバーに保存せずに同期しようとしています。
2 に答える
コンテンツ スクリプトは、ページの localStorage に直接アクセスできます。
特定のドメインの値を保存する場合は、ウィンドウまたはフレームを開いてから、ウィンドウ/ページのローカル ストレージに書き込みます。
お気に入りのオプションを選択して、ページを有効にします。
chrome.tabs.create
を使用して見つかった非アクティブなウィンドウに、非アクティブなタブを作成しますchrome.tabs.query
。- 実験的な
offscreenTabs
API (実験的であるため、本番環境で使用する準備はできていません)。私が SO に投稿した例のいくつかを参照してください。 - IFrame を作成し、現在のページに挿入します。
window.open
(お勧めしません...)
ページを開くことにしたときは、軽量なページを選択してください。
/robots.txt
ほとんどのサイトに存在し、プレーン テキスト ファイルです。ページのコンテンツ スクリプトをアクティブにします。マニフェスト ファイルを使用してメッセージング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);
});
});
これを行う唯一の解決策は、クロスドメインの制限のためにスクリプトインジェクションを介することだと思います。
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」に追加する必要があります。
スクリプトが完全にロードされると、スクリプトは自動的に削除されることに注意してください。実行するコードが自己実行可能関数に含まれていることを確認してください。