14

chrome.app.isInstalled が Google Chrome 拡張機能に対して常に false を返すのはなぜですか?

ページの読み込み時にリンク要素を動的に追加します。

<link type="text/css" rel="chrome-webstore-item" href="https://chrome.google.com/webstore/detail/itemID">

以下は、ボタンがクリックされたときに実行される Javascript の一部です。

if (!chrome.app.isInstalled) {
 alert('extension is about to be installed!');
 install_extension();
}else{
  alert('extension is installed already.');
}

ボタンを初めてクリックしたとき、Google Chrome から拡張機能をインストールするかどうか尋ねられました。同意します。拡張機能は正しくインストールされました。ページを更新したときにボタンをもう一度クリックすると、2 分前にインストールしたにもかかわらず、Google CHrome から拡張機能をもう一度インストールするように求められました。つまり、拡張機能がインストールされている場合でも、chrome.app.isInstalled は常に false を返します。なんで?

4

3 に答える 3

15

chrome.app.isInstalled を参照してください。常に "false" として返されます。

chrome.app.isInstalledホストされたアプリ(アプリを含む一連の URL を定義する) で使用するためのものです。代わりに、ページに DOM ノードを挿入することで、拡張機能が既にインストールされていることを示すことができます ( https://developers.google.com/chrome/web-store/docs/inline_installation#already-installedの後半を参照)。

そのリンクは、拡張機能がインストールされているかどうかをテストするための戦略を説明しています。

  1. コンテンツ スクリプトを使用して、すべてのページに DOM ノードを挿入します。このノードには非常に具体的な ID が必要です。<div id='my-extension-installed-with-id-sdgdthsdfgdtyjufwknsdkos'>

  2. ボタンを押すと、そのノードが存在するかどうかをページでテストします。

  3. ノードが存在する場合、コンテンツ スクリプトが実行されています。したがって、拡張機能がインストールされます。存在しない場合は、拡張機能がインストールされていないと想定します。

DOM ノードを注入しても、 の状態には影響しませんapp.isInstalled。代わりに、拡張機能の存在の証明として DOM ノードの存在を確認します。

于 2013-08-16T15:00:25.513 に答える
6

別の解決策は、を採用することexternally_connectableです。

検証済みのサイトからインライン インストールが行われるため、拡張機能が存在することを確認するドメインが設定されています。example.comと、そのサブドメインとしましょう。

次に、マニフェストで次を定義できます。

"externally_connectable" : {
  "matches" : [
    "*://*.example.com/*"
  ]
}

chrome.runtime.sendMessageこれにより、ドメインに公開されexample.comます。

次に、ページからの「ping」onMessageExternalに応答する拡張機能のメッセージ リスナーを設定できます。

詳細については、この回答を参照してください。

于 2014-12-08T15:32:29.587 に答える