1

さまざまなコンポーネント間でメッセージを渡すために使用できる関数に直接リンクされている、クロム拡張ビューとしてカウントされるものについて、かなり混乱しています。

私が最初にやろうとしていることを説明させてください。

私の background.html は、socket.io を介して node.js サーバーから受信したいくつかのイベントに基づいて、デスクトップ通知を作成します。

ユーザーが通知をクリックしたときに、拡張機能 (/src/view/token.html) 内の html を指す新しいタブを作成し、background.js (socket.io コードの場所) からいくつかのデータを送信したいと考えています。は、新しいタブに移動します。そして、メッセージパッシングを通じてこれを行いたいと思います。

だから、基本的に、私はやっています

 var notification = webkitNotifications.createNotification(image, title, content);
 notification.onclick(function(e){

    chrome.tabs.create({url: "/src/view/tokens.html"}, function(tab){
        //just to make sure the tab is activated..
        chrome.tabs.onUpdated.addListener(function(tabId){
            if(tabId == tab.id) {
                chrome.tabs.sendMessage({data: whatever_data}, tabId); 
            }
        });
    });

 });

今、私の問題は tokens.js (tokens.html にロードされている) にあり、次を使用してメッセージをリッスンしようとします。

chrome.extension.onMessage.addListener(function (msg, _, sendResponse) {
console.log(msg);
});

しかし、「Uncaught TypeError: Cannot read property 'onMessage' of undefined:」が表示されるので、tokens.html の chrome.extension にアクセスできないと思いますか???

ポップアップ ページ (ブラウザ アクション ポップアップ) とオプション ページでこれを試したところ、すべて問題なく動作しました。だから、私が作成したビューはクロム拡張ページではないと思いますか?

今、私は混乱しています... 1) chrome.* API にアクセスできる chrome 拡張ページとは何ですか?

ありがとう!

4

1 に答える 1

3

コードの問題

  • chrome.tabs.sendMessage()呼び出しパターンが間違っています
  • 完全なコードが共有されていないため、マニフェストは一部の値のセットに対して警告を生成しないため、すべてのページにアクセス許可が付与されていると想定しています。
  • notification.onclick(functionUncaught TypeError: Property 'onclick' of object #<Notification> is not a functionエラーを作成し ます

Chrome.tabs.sendMessage

chrome.tabs.sendMessageの呼び出し形式({data:whatever_data}, tabId); chrome.tabs.sendMessage (tabId,{"data": "whatever_data"}); で ある必要があります。(タブ ID の後にメッセージが続きます)。

notification.onclick(関数

notification.onclick = (function(onclick プロパティにハンドラーの割り当てを使用します(関数ではないため)

上記の問題を修正した後、スクリプトを実行しました。

マニフェスト.json

バックグラウンド スクリプトを登録し、必要なすべての権限を与えます。

{
    "name": "Message Passing",
    "description": "This is used as a message passing",
    "version": "1",
    "manifest_version": 2,
    "background": {
        "scripts": [
            "background.js"
        ]
    },
    "permissions": [
        "notifications",
        "tabs"
    ]
}

background.js

エラーを排除するために修正されたコード

//Created Notification
var notification = webkitNotifications.createNotification("icon.jpg", "title", "content");
//Added onclick property
notification.onclick = (function (e) {
    //Created new tab
    chrome.tabs.create({
        url: "/src/view/notification.html"
    }, function (tab) {
        //just to make sure the tab is activated..
        chrome.tabs.onUpdated.addListener(function (tabId) {
            if (tabId == tab.id) {
                //Send Mesage
                chrome.tabs.sendMessage(tabId, {
                    "data": "whatever_data"
                });
            }
        });
    });
});
notification.show();

通知.html

CSPに準拠するタグinline scriptがないことを確認します。<script>

<html>

    <head>
        <script src="notification.js">

        </script>
    </head>

    <body>
        <p>This is a notification</p>
    </body>

</html>

通知.js

スクリプトを変更せずに使用しました!

chrome.extension.onMessage.addListener(function (msg, _, sendResponse) {
    console.log(JSON.stringify(msg));
});

出力

新しい でメッセージが受信されていることを確認できますtab

ここに画像の説明を入力

参考文献

于 2013-01-11T06:09:32.853 に答える