2013-06-25 188 views
2

所以,我有一個擴展我寫,我想,當用戶點擊該圖標pageAction執行腳本。當圖標被點擊時,該方法調用chrome.tabs.executeScript(...)。問題是,chrome.tabs.executeScript函數沒有執行,我不知道爲什麼。我知道我正在調用executeScript的代碼,因爲我在那裏出現了一個警告。下面是我的一些代碼:鉻executeScript功能不能正常工作

manifest.json的

{ 
    "manifest_version": 2, 
    "name": "name here", 
    "description": "description here", 
    "version": "0.1", 
    "permissions": [ 
    "<all_urls>", 
    "tabs" 
    ], 
    "icons": { 
    "16" : "images/icon16.png", 
    "48" : "images/icon48.png", 
    "128": "images/icon128.png" 
    }, 
    "background": { 
    "scripts": ["js/check.js"] 
    }, 
    "page_action": { 
    "default_icon": { 
     "19": "images/icon19.png", 
     "38": "images/icon38.png" 
    }, 
    "default_title": "default title here" 
    } 
} 

JS/check.js

chrome.tabs.onUpdated.addListener(checkForValidUrl); 

function checkForValidUrl(tabId, changeInfo, tab) { 
    if (tab.url.indexOf('g') > -1) { 
    chrome.pageAction.show(tabId); 
    } 
}; 

chrome.pageAction.onClicked.addListener(function(tab) { 
    alert("hello world"); //this code is executed... 

    //...this code is not 
    chrome.tabs.executeScript(tab.id, {file: "save.js"}, function() { 
    if(chrome.runtime.lastError) { 
     console.error(chrome.runtime.lastError.message); 
    } 
    }); 
}); 

JS/save.js

alert("hello world"); 

就像我在代碼中所說的,我的pageAction onClick函數中的hello世界有效。 executeScript方法不。任何關於發生的事情的想法都會有幫助。

+0

此外,'console.error(...)'代碼'executeScript(...)'方法返回後應該火是永遠不會被調用,所以並沒有幫助我。 – mottese

回答

2

瞎搞,有很多在我的代碼不同的事情後,我已經找到了解決我的問題。該錯誤似乎在{file: "save.js"}的行中。當它尋找save.js,它顯然是在尋找頂級目錄,我的manifest.json文件所在,而不是在我的代碼中,我不得不改變我的代碼{file: "js/save.js"}爲了我save.js文件中找到的目錄。

2

根據the docs

把代碼插入到頁面中,您的分機必須cross-origin permissions的頁面。它也必須能夠使用chrome.tabs模塊。您可以使用清單文件的權限字段獲得兩種權限。

因此,您需要在該權限字段中對該網站的許可,即http://example.com/

+0

我在清單中添加了''權限,直到我解決了問題,但我仍然沒有收到任何東西。沒有顯示代碼響應或錯誤。 – mottese

+1

@mottese文件存在嗎?它是否包含錯誤?開發者控制檯中的任何錯誤? –

+1

該文件存在,它包含所有的'警報(「世界你好」);其中不包含錯誤',而開發者控制檯顯示什麼,即使我已經明確寫入代碼話說打印錯誤。 – mottese