2015-06-01 112 views
0

我建立一個簡單的Chrome擴展: manifest.json的簡單的Chrome擴展

{ 

    "name": "Hello World", 
    "version": "1.0", 
    "manifest_version": 2, 
    "background": { 
     "scripts": ["js/background.js"] 
    }, 
    "description": "My First Chrome Extension", 
    "browser_action": { 

     "default_icon": "icon.png", 
     "default_popup": "popup.html" 

    }, 
    "permissions": ["tabs", "activeTab", "<all_urls>"], 
    "content_scripts": [ 
     { 
      "matches": ["http://*/*"], 
      "js": ["js/script.js"] 
     } 
    ] 

} 

background.js

chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
    chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) { 
     console.log(response.farewell); 
    }); 
}); 

scripts.js中

chrome.runtime.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"}); 
      document.write(request.greeting); 
     } 
    }); 

popup.html

<script src="js/script.js"></script> 

新按鈕正確顯示在我的Chrome窗口中,但是當我單擊它時,會創建一個空對話框,儘管我希望它會指出「你好」。有什麼建議?

+0

你幾乎肯定不希望js/script.js是一個彈出腳本*和*內容腳本。查看[概述](https://developer.chrome.com/extensions/overview)。 – Teepeemm

回答

0

如果您在清單中設置了"default_popup": "popup.html",請打開一個窗口以顯示您的html頁面。所以,請從清單(無需popup.html文件),這條線和background.js做這樣的事情:

chrome.browserAction.onClicked.addListener(function() { 
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
     chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) { 
      console.log(response.farewell); 
     }); 
    }); 
}); 
+0

這裏似乎不是答案;當我仔細地閱讀這個問題時,OP似乎希望「hello」出現在彈出窗口中。 – Xan

0

雖然我也希望它說「你好」空對話創建

您正在從內容腳本調用document.write,而不是彈出代碼 - 因此它正在寫入實際活動選項卡,而不是彈出窗口。

要在彈出窗口中顯示某些內容,您需要從popup的代碼中與其document進行交互。