2013-03-08 9 views
5

別のドメインのローカルストレージに書き込むにはどうすればよいですか。アイデアは、ローカル記憶域に何かを書き込むためにクロム拡張子が必要であり、ユーザーが関連するWebサイトを訪問するときに、サイトサイトがローカルストレージの内容を読み取ることができるということです。私は、サーバーに保存することなく、ユーザーの個人データを同期しようとしています。Chrome拡張機能 - 別のドメインのローカルストレージに書き込む

答えて

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); 

他のサイトのlocalStorageにアクセスして、あなたの内線にファイルscript.jsを追加し、あなたのマニフェストファイルに「web_accessible_resources」にscript.jsを追加する必要があります。

スクリプトは完全に読み込まれた後に自動的に削除されるので、実行するコードが自己実行可能機能に含まれていることを確認してください。

6

Content scriptsは、ページのlocalStorageに直接アクセスします。

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

  1. は、ページをアクティブにするために、あなたの好みのオプションを選択してください:

    • chrome.tabs.createは、おそらくchrome.tabs.queryを使用した非アクティブウィンドウで、非アクティブなタブを作成します。
    • 実験的なoffscreenTabs API(実験的なので、本番環境では使用できません)。私が投稿したexamplesのいくつかを見てください。
    • IFrameを作成し、現在のページに挿入します。
    • window.open
    • (推奨しません...)

    あなたは、ページを開く軽量のあるものを選択することを決定しました。 /robots.txtは通常、良い選択です:ほとんどのサイトに存在します。はプレーンテキストファイルです。

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

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

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); 
    }); 
}); 
+1

確かにこれは実行可能なソリューションのようです。今私が持っている問題は、私はバックグラウンドページからそれを行う必要があります。非アクティブなタブを作成すると、ユーザーに何かが表示されます。オフスクリーンタブはバックグラウンドページでは機能しません。明らかにWindow.open()は解決策ではありません。しかし私はiFrameを試し、それがどのように進むのか教えてくれます。 – budsiya

関連する問題