2012-02-25 60 views
0

我正在创建一个Chrome扩展,点击扩展图标后会向用户显示一个按钮,单击该按钮将打开一个新选项卡,该选项卡将显示传递给它的参数从原始页面。奇怪的是,如果我调试它(​​如右键单击扩展图标并单击“Inspect popup”),它将起作用,但如果我没有调试,单击该按钮时它将显示一个空白页面。Chrome扩展 - javascript中的onClick函数只在调试时才起作用

的manifest.json

{ 
    "name": "test name", 
    "version" : "0.1", 
    "description": "test description", 
    "browser_action": 
    { 
     "default_icon": "icon_128.png", 
     "popup": "test.html" 
    }, 
    "permissions": [ 
     "tabs", "http://*/*", "https://*/*" 
    ] 
} 

的test.html

<HTML> 
<BODY> 
<script type="text/javascript"> 
var currentWindowID = -1; 

window.onload = function(e){ 
    chrome.windows.getCurrent(function(w) 
    { 
     currentWindowID = w.id; 
    }); 
} 

function openNextPage(){ 
    console.log("in openNextPage"); 
    chrome.tabs.create( 
     {url: "test2.html"}, 
     function(tab) 
     {    
      chrome.tabs.sendRequest(tab.id, {someParam: currentWindowID}); 
     } 
    ); 
    console.log("exiting openNextPage"); 
} 
</script> 
<input type="button" value="Show next page" onClick="openNextPage()"> 
</BODY> 
</HTML> 

test2.html

<HTML> 
<script type="text/javascript"> 
    chrome.extension.onRequest.addListener(function(request) 
    { 
     document.write("<h1>test</h1>"); 
     document.write("<h2>value=" + request.someParam + "</h2>"); 
    }); 
</script> 
</HTML> 

回答

2

浏览器将激活新标签时创建,和你的弹出窗口中将被关闭。因此,从来没有从chrome.tabs.create调用回调。背景页面是这类代码更合适的地方。

的test.html

<HTML> 
<BODY> 
<script type="text/javascript"> 
var currentWindowID = -1; 

window.onload = function(e){ 
    chrome.windows.getCurrent(function(w) 
    { 
     currentWindowID = w.id; 
    }); 
} 

function openNextPage() { 
    var bg = chrome.extension.getBackgroundPage(); 
    bg.openNextPage(currentWindowID); 
} 
</script> 
<input type="button" value="Show next page" onClick="openNextPage()"> 
</BODY> 
</HTML> 

background.html

<HTML> 
<BODY> 
<script type="text/javascript"> 
function openNextPage(currentWindowID) { 
    console.log("in openNextPage"); 
    chrome.tabs.create( 
    {url: "test2.html"}, 
    function(tab) 
    {    
     chrome.tabs.sendRequest(tab.id, {someParam: currentWindowID}) 
    } 
); 
    console.log("exiting openNextPage"); 
} 
</script> 
</BODY> 
</HTML> 
+0

是的,这个作品!谢谢。请注意,您需要将此行添加到manifest.json文件中: \t“background_page”:“background.html”, – Anssssss 2012-02-27 01:47:07

相关问题