2

スタックオーバーフローに関するいくつかの関連する質問を見た後、この質問をしています。拡張機能がインストールされているかどうかを検出する方法から始めました。一部のページでコンテンツ スクリプトを使用して本文に div を追加する方法を選択しました。これが私がやった方法です...

マニフェスト.json

{
    "name": "Install Check",
    "content_scripts": [
        {
            "matches": ["http://host.com/*"],
            "js" : ["insert_node.js"]
        }
    ],
    "permissions": [
        "tabs", "host.com/*"
    ]
}

insert_node.js (コンテンツ スクリプト)

var insert_node = document.createElement('div');
insert_node.id = "HOST_SITE";
document.body.appendChild(insert_node);

ホストページ

<html>
<head>
</head>
<body>
    <h1>This is a host site. Welcome!!!</h1>
    <script src="jquery.js"></script>
    <script src="notification.js"></script>
</body>
</html>

拡張機能のインストール スクリプト

$(document).ready(function() {
    if ($('#HOST_SITE').length > 0) {
        alert("you have our extension installed");
    } else {
        alert("not installed");
    }
});

私の問題は、クロムがDOMにノードを挿入する前に、メッセージ付きのアラートがnot_installed常にポップアップすることです。ここでmanifest.jsonのrun_at属性について読みました。しかし、それでも問題は解決しませんでした。、、の 3 つの値をすべて試しました。ここで何が間違っているのですか?document_startdocument_idledocument_end

4

3 に答える 3

7

あなた自身の拡張機能とウェブサイトのように見えます。その場合、インラインインストールを使用する方がはるかに簡単です。

if (typeof chrome !== "undefined" && typeof chrome.app !== "undefined" && chrome.app.isInstalled) {
  // extension is installed.
}
于 2012-02-16T16:13:46.653 に答える
0

頭と体を検索するだけのように見えるので、JQueryでこれを行う方法がわかりませんか$("#something")?...そして必要document.documentElementです。document_startに何かを挿入していて、そのときbody / headがないのに、documentElementがあるからです。

マニフェスト.json

{
    "name": "Install Check",
    "content_scripts": [
        {
            "matches": ["HOST"],
            "js" : ["myscript.js"],
            "run_at":"document_start"
        }
    ],
    "permissions": [
        "tabs", "HOST"
    ],
    "version":"1.0"
}

myscript.js

var insert_node = document.createElement('div');
insert_node.id = "HOST_SITE";
document.documentElement.appendChild(insert_node);

Notification.js

if (document.documentElement.querySelector("#HOST_SITE")) {
    alert("Installed");
} else {
    alert("Not Installed");
};
于 2012-02-16T15:04:10.187 に答える
0

私はこれを機能させました...

  • DOM の読み込み後、画像などの他のリソースが読み込まれる前に、拡張機能がコンテンツ スクリプトを挿入するようにします。

manifest.json (追加"run_at": "document_end")

{
    "name": "Install Check",
    "content_scripts": [
        {
            "matches": ["http://host.com/*"],
            "js" : ["insert_node.js"],
            "run_at": "document_end"
        }
    ],
    "permissions": [
        "tabs", "host.com/*"
    ]
}
  • window.onloadの代わりに使用$(document).ready

insert_node.js (を に$(document).ready変更window.onload)

window.onload = function() {
    if ($('#HOST_SITE').length > 0) {
        alert("you have our extension installed");
    } else {
        alert("not installed");
    }
};

ただし、使用が機能する理由と機能しない理由を完全には理解してwindow.onload$(document).readyません。

誰かがそれに光を当てることができるでしょうか?

また、これを行うには使用する方が良いという@abrahamに同意しchrome.app.isInstalledます(私のコメントへの答えはケーキのアイシングになります):)

于 2012-02-17T05:34:38.680 に答える