2014-02-12 88 views
6

當我console.log(chrome)谷歌Chrome瀏覽器我得到某些屬性,但我發現鉻的'運行時'屬性不可用。chrome.runtime是從鉻商店安裝擴展時未定義

app: Object 
csi: function() { native function GetCSI(); return GetCSI();} 
loadTimes: function() { native function GetLoadTimes(); return GetLoadTimes();} 
webstore: Object 
__proto__: Object 
__defineGetter__: function __defineGetter__() { [native code] } 
__defineSetter__: function __defineSetter__() { [native code] } 
__lookupGetter__: function __lookupGetter__() { [native code] } 
__lookupSetter__: function __lookupSetter__() { [native code] } 
constructor: function Object() { [native code] } 
hasOwnProperty: function hasOwnProperty() { [native code] } 
isPrototypeOf: function isPrototypeOf() { [native code] } 
propertyIsEnumerable: function propertyIsEnumerable() { [native code] } 
toLocaleString: function toLocaleString() { [native code] } 
toString: function toString() { [native code] } 
valueOf: function valueOf() { [native code] } 
get __proto__: function __proto__() { [native code] } 
set __proto__: function __proto__() 

so chrome.runtime is undefined。

,因此我不能夠使用chrome.runtime.sendMessage我的擴展

如何解決上述??

編輯:

我的代碼是:

if(typeof(chrome) === 'undefined'){ 
       result.isChromeBrowser = false; 
       return next(result); 
       } else { 
       result.isChromeBrowser = true; 
       } 

console.log(chrome.runtime); // undefined 

       //check whether the chrome runtime is available or not ... 
       if(!chrome.runtime){ 
       result.isChromeRuntimeAvailable = false; 
       console.log(result); 
       } else { 
       result.isChromeRuntimeAvailable = true; 
       } 

編輯2:

從這裏:https://developer.chrome.com/extensions/manifest/externally_connectable.html。 我相信(通過上面的鏈接,如果我錯了,請糾正我)網頁可以與Chrome擴展進行通信。但是當從chrome存儲庫安裝擴展程序時無法完成,但是在從本地目錄安裝擴展程序的情況下完美工作。

我提供externallyConnectable爲:

"externally_connectable": { 
     "matches": [ 
      "*://local.mywebsite.com/*" 
     ] 
    } 

我已經包括了externally_connectable與「匹配」屬性。現在當我加載解壓目錄下安裝擴展,我的網頁獲取chrome.runtime ..但是當我安裝擴展從鉻商店,相同的瀏覽器網頁不會得到chrome.runtime ..爲什麼這樣? 最後我還是沒有chrome.runtime的頁面://local.mywebsite.com/。 幫我一把。

+1

您使用的是分機的控制檯或者你是否還在爲網頁背景? – 1337holiday

+0

來自頁面上下文。 – codeofnode

+2

在控制檯,你會看到'<頁面上下文>'下拉,更改您的分機'鉻擴展:<分機號>',然後運行chrome.runtime。要找到你的擴展ID去'工具> Extensions' – 1337holiday

回答

2

我的問題得到解決,從鉻商店完全刪除插件,並重新上傳和再次發佈插件。

問題是: 最初我沒有'externally_connectable'屬性,所以無法得到chrome.runtime定義。後來,當我包括,然後我更新鉻插件。 而主要原因可能是:'只有通過上傳更新插件,Chrome商店纔會修改'manifest.json'(至少對於某些屬性,如'externally_connectable')。您可能需要刪除並重新上傳以獲取manifest.json更新'(這是我可以得出的結論,因爲我的經驗,請糾正我,如果我錯了一些有效的參考源。)

等'鉻.runtime'仍未定義。

後來當我刪除插件並重新上傳,一切正常。

+0

當您上傳新版本時,商店應更新整個'manifest.json',但您的本地Chrome安裝不會立即更新。您可以通過轉到chrome:// extensions /,啓用開發人員模式,然後單擊「立即更新擴展」來強制執行此操作。通過加載「解壓縮」來遍歷擴展通常會更好,然後只在工作時才上傳到商店。 –

1

你可能有這個問題這是以前已經解決:
chrome.runtime.sendMessage not working as expected

嘗試檢查什麼的sendMessage是availaible。如果沒有這樣的,那麼Chrome版本是真的老了:
Chrome Extension: Port error: Could not establish connection. Receiving end does not exist.

希望我幫助,乾杯!

+0

鏈路具有「的sendMessage不是函數」的問題。但是我的狀態是'運行時可用'。關於版本。我說的所有工作都很好,但問題是當我從Chrome商店安裝插件。意思是我希望沒有鉻版本相關的問題,因爲我有最新的一個。 – codeofnode