2017-06-22 39 views
0

我正在嘗試創建一個簡單的Chrome擴展,它將從頁面讀取一些數據,在擴展圖標上設置一個徽章計數,然後在彈出窗口中顯示數據。然而,我努力從我的內容腳本中獲取數據到我的背景js。Chrome.Runtime.SendMessage不工作

我看過很多關於這個的問題,在我看來,我做的一切都是正確的,但它仍然無法正常工作。

這是我做了什麼:

manifest.json的

{ 
    "name": "__MSG_appName__", 
    "version": "0.0.1", 
    "manifest_version": 2, 
    "description": "__MSG_appDescription__", 
    "icons": { 
    "16": "images/icon-16.png", 
    "128": "images/icon-128.png" 
    }, 
    "default_locale": "en", 
    "background": { 
    "scripts": [ 
     "scripts.babel/chromereload.js", 
     "scripts.babel/background.js" 
    ] 
    }, 
    "content_scripts" : [ 
    { 
     "matches": ["http://localhost:9000/*"], 
     "js":["scripts.babel/myscript.js"] 
    } 
    ], 
    "permissions": [], 
     "browser_action": { 
     "default_icon": { 
     "19": "images/icon-19.png", 
     "38": "images/icon-38.png" 
    }, 
    "default_title": "MiAssist", 
    "default_popup": "popup.html" 
    } 
} 

內容腳本:

myscript.js

"use strict"; 
var names = findNames(); 
sendNames(names); 

function findNames() 
{ 
    var names = []; 
    //finds names.. 

    return names; 
} 

function sendNames(names) 
{ 
    // Bind event: 
    chrome.runtime.sendMessage(null, names, null, 
    function(response) { 
     // Do something 
     ; 
    }); 
} 

個background.js

'use strict'; 

chrome.runtime.onInstalled.addListener(details => { 
    console.log('previousVersion', details.previousVersion); 
}); 

// Bind event: 
chrome.runtime.onMessage.addListener(
    function(names, sender, sendResponse) { 
    console.log("background.js"); 
    if(names.length > 0) 
    { 
     chrome.browserAction.setBadgeText({text: names.length}); 
    } 
}); 

所有這一切都不起作用。 onMessage匿名函數永遠不會到達。

請問有人可以幫助我嗎?任何幫助將不勝感激。謝謝。

+0

嘗試沒有的sendMessage –

+0

@JaromandaX感謝第一個空,但沒有工作:(由內容腳本中設置斷點調試 – kingLoosh

+0

它和後臺腳本。 – wOxxOm

回答

1

避免使用null作爲可選參數。如果你只需要一個消息和回調 - 只傳遞兩個這個參數。

我想你的代碼我的話,它的工作原理:

chrome.runtime.sendMessage(names, 
    function(response) { 
     console.log(response); 
    } 
);