私は Chrome 拡張機能を構築中ですが、全体が希望どおりに動作するためには、ユーザーが拡張機能をインストールしているかどうかを検出できる外部 JavaScript スクリプトが必要です。
たとえば、ユーザーが私のプラグインをインストールし、私のスクリプトが含まれた Web サイトにアクセスします。Web サイトは私の拡張機能がインストールされたことを検出し、それに応じてページを更新します。
これは可能ですか?
ベストアンサー1
Chrome では、Web サイトから拡張機能にメッセージを送信できるようになりました。
したがって、拡張機能 background.js (content.js は機能しません) に次のようなコードを追加します。
chrome.runtime.onMessageExternal.addListener(
function(request, sender, sendResponse) {
if (request) {
if (request.message) {
if (request.message == "version") {
sendResponse({version: 1.0});
}
}
}
return true;
});
これにより、Web サイトから電話をかけることができるようになります。
var hasExtension = false;
chrome.runtime.sendMessage(extensionId, { message: "version" },
function (reply) {
if (reply) {
if (reply.version) {
if (reply.version >= requiredVersion) {
hasExtension = true;
}
}
}
else {
hasExtension = false;
}
});
その後、hasExtension 変数をチェックできます。唯一の欠点は、呼び出しが非同期であるため、何らかの方法でそれを回避する必要があることです。
編集:下記のように、エントリを追加する必要がありますマニフェストアドオンにメッセージを送信できるドメインをリストします。例:
"externally_connectable": {
"matches": ["*://localhost/*", "*://your.domain.com/*"]
},
2021年更新: chrome.runtime.sendMessage
拡張機能がインストールされていないか無効になっている場合は、コンソールに次の例外がスローされます。
未チェックのruntime.lastError: 接続を確立できませんでした。受信側が存在しません
sendMessage
これを修正するには、コールバック内にこの検証を追加します
if (chrome.runtime.lastError) {
// handle error
}