30

特定のイベントでブラウザ通知を作成し、background.jsで計算されたデータでポップアップを埋める独自のクロム拡張機能を実装しようとしています

これが私のmanifest.jsonファイルです:

{
    "name": "Dummy name",
    "description": "Description",
    "manifest_version": 2,
    "version": "1.1.3",
    "icons": {
        "16": "icon_16.png",
        "48": "icon_48.png",
        "128": "icon_128.png",
        "256": "icon_256.png"
    },
    "browser_action": {
        "default_icon": "icon_48.png",
        "default_title": "Test",
        "default_popup": "popup.html"
    },
    "permissions": ["background","webRequest","webRequestBlocking","webNavigation","tabs","notifications"],
    "background": {
        "scripts":["jquery-1.8.1.min.js","classy.js","background.js"]
    }
}

sendMessage私の呼びかけbackground.js

show : function(result) {
    var that = this;
    chrome.extension.sendMessage({greeting: "hello"}, function(response) {
        console.log(response);
    });

    if(window.webkitNotifications) {
        var notification = webkitNotifications.createHTMLNotification('notification.html');
        notification.show();
        setTimeout(function(){
            notification.cancel();
            }, '7000');
        }
    }

私のメッセージ リスナーpopup.js(Chrome 拡張サンプルから)

chrome.extension.onMessage.addListener(
  function(request, sender, sendResponse) {
    console.log(sender.tab ?
                "from a content script:" + sender.tab.url :
                "from the extension");
    if (request.greeting == "hello")
      sendResponse({farewell: "goodbye"});
  });

私が得る唯一のエラーは

ポート エラー: 接続を確立できませんでした。受信側が存在しません。

ご協力ありがとうございました!

4

5 に答える 5

11

これを解決するには、最初にハンドシェイク メッセージを background.js に送信してから、実際のデータを background.js から popup.js に送信する必要があります。

popup.js

chrome.runtime.sendMessage({data:"Handshake"},function(response){
	
			});
chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
	str = JSON.stringify(message.data);
});

background.js

chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
//alert(message.data);
	chrome.runtime.sendMessage({data:datax},function(response){
			});
			});

私がやろうとしているのは、アイコンをクリックするとすぐにハンドシェイク メッセージが background.js に送信され、それを受信すると、popup.js で送信してレンダリングしたい変数または任意のデータを送信できることです。 popup.html で。

于 2016-08-22T08:44:14.830 に答える
0

runtime.sendMessageメッセージをバックグラウンド スクリプトに送信し、tabs.sendMessageバックグラウンドからコンテンツ スクリプトに送信するために使用します。

タブ ID を指定する必要があることに注意してください。

chrome.tabs.query({ active: true }, (tabs) => {
    chrome.tabs.sendMessage(tabs[0].id, { greeting: 'hello' }, (response) => {
        console.log(response);
    });
});

ここで完全な例とドキュメントを見つけることができます: https://developer.chrome.com/extensions/messaging#simple

于 2017-01-26T15:09:40.487 に答える