2009-11-19 26 views
13

ステータスバーにユーザーのStackOverflow/SuperUser/ServerFaultの評判を表示するChrome 4(現在4.0.249.0)の拡張機能を開発しています。私はオプションのページを設計してユーザーのプロファイルIDを取得し、それらをlocalStorageに保存して拡張機能でよく読みます。それはすべて素晴らしい作品です。
問題は、オプションの保存時に拡張機能を更新する(プログラム的な)方法が見つからないということです。私はそれを右クリックしたときに拡張ページ自体からlocation.reload();を呼び出してみました - 無駄に。私はさらにそれを追求し、Chromeのchrome://extensions/ページは、拡張子をリロードするために何をするかを見てみましたが、このコードを見つけました:私のイベントハンドラにこのコードをコピーChrome拡張機能を更新/再読み込みするにはどうすればよいですか?

/** 
* Handles a 'reload' button getting clicked. 
*/ 
function handleReloadExtension(node) { 
    // Tell the C++ ExtensionDOMHandler to reload the extension. 
    chrome.send('reload', [node.extensionId]); 
} 

は助けにはならなかった(はい、私はと[node.extensionId]を交換してみました実際のコード)。誰かがこれを正しい方法でやるのを助けてくれますか、これを正しく行うエクステンションのコードを私に指摘してもらえますか?終了したら、拡張機能とそのソースをブログに入れます。

答えて

5

chrome.send関数は、拡張機能のjavascriptコードからアクセスできません。newtabページ、履歴、拡張ページなどのページでは、これらのページのC++コントローラコードと通信するために使用されます。

拡張機能のアップデートをインストールしたユーザーにプッシュできます。これはhereと記載されています。ユーザーのアプリケーションは、自動更新間隔に達するか、ブラウザを再起動すると更新されます。ただし、プログラムでユーザーの内線番号をリロードすることはできません。それがセキュリティ上のリスクになると私は思う。

+0

ありがとうピエール。自分の内線をクリックするようにユーザに警告することで、私の問題を解決しました。 –

+5

この質問は古いですが、[拡張管理API](http://code.google.com/chrome/extensions/management.html) – gengkev

+0

セキュリティリスクにアクセスできる場合は、拡張機能のリロードをトリガーできますか?代わりに開発者の経験が貧弱になります。 – bartek

2

window.location.reload()リロード自体に拡張子を作るための最も簡単な方法があり、それは今、新しいバージョン

+0

どこにこれを置いたのですか? – knoopx

+3

私はbackground.jsの中で使っています。 でも、あなたのビューからそれを使うことができます: chrome.extension.getBackgroundPage()。window.location。reload() – Marek

+0

バックグラウンドページは、後に「ページ」です。 – RayfenWindspear

31

で修正されるかもしれないので、私はクロム6.xを使用しています私のため

の作品chrome.runtime.reload()に電話してください。この機能は、マニフェストでパーミッションを必要としません。 へリロード別拡張使用chrome.management.setEnabled()。マニフェストの"permissions":["management"]が必要です。

+0

これを受け入れる必要があります回答 – ALTN

+0

受け入れられた答え! – NikosKeyz

3

an extensionと同じ問題がありました。

background.js内のストレージの変更をリッスンしてchrome.storage.onChangedを使用してリフレッシュロジックを実行することができます。例えば

// Perform a reload any time the user clicks "Save" 
chrome.storage.onChanged.addListener(function(changes, namespace) { 
    chrome.storage.sync.get({ 
    profileId: 0 
    }, function(items) { 

    // Update status bar text here 

    }); 
}); 

また、アカウントにchangesパラメータを取ることによって部品あなたの拡張機能のこの方法をリロードできます。 chrome.runtime.reload()が簡単かもしれませんが、オーバーヘッドは少なくなります。

関連する問題