2011-12-10 80 views
4

這是我的background.html文件,它在當前選項卡中打開時工作正常,但我希望它在新選項卡中打開,我做錯了什麼?在谷歌瀏覽器擴展程序中打開新選項卡

<html> 
<head> 
<script> 
    // Called when the user clicks on the browser action. 
    chrome.browserAction.onClicked.addListener(function(tab) { 
    var action_url = "javascript:location.href='http://www.reddit.com/submit?url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title)"; 
    chrome.tabs.create(tab.id, {url: action_url}, function(tab)); 
    }); 
</script> 
</head> 
</html> 
+0

確保您action_url開頭:'HTTP://'或'的https://' –

回答

6

您應該再次閱讀chrome.tabs.createdocumentation。你正在傳遞它的參數。您還在使用location,它來自background.html文檔,而不是代碼所期望的網頁文檔,而不是傳遞給chrome.browserAction.onClicked偵聽器的tab參數。

<html> 
<head> 
<script> 
    // Called when the user clicks on the browser action. 
    chrome.browserAction.onClicked.addListener(function(tab) { 
    var action_url = "http://www.reddit.com/submit?url=" + encodeURIComponent(tab.href) + '&title=' + encodeURIComponent(tab.title); 
    chrome.tabs.create({ url: action_url }); 
    }); 
</script> 
</head> 
</html> 
+0

從哪裏獲取標籤的ID? – st4rgut

1

如果你堅持使用彈出,並希望它儘快打開它關閉,然後用的是上面你可以試試這個

<html> 
... 
<body> 
    <script> 
    function createTab() { 
     chrome.tabs.create({url: "http://www.stackoverflow.com"}); 
    } 
    </script> 
    <a href="#" onclick="createTab();">Create a new tab</a> 
</body> 
</html> 
+0

不,我不希望它這樣的,其實我是想盡快創建爲新標籤圖標被按下。 – orange

+0

@Jeff這只是一個例子。我想告訴你,你不需要編寫如此複雜的'chrome.tabs.create'命令。嘗試使用此代替。儘管我不擅長JavaScript,var action_url對我來說似乎很奇怪......請檢查JavaScript控制檯是否存在可能的錯誤。 – user219882

+0

請注意,在Manifest 2.0中,默認的[內容安全策略](https://developer.chrome.com/extensions/contentSecurityPolicy)禁止內嵌JavaScript。 – 10basetom

0
<html> 
<head> 
    <script type="text/javascript"> 
    window.master = ({ 
    newtab: function(url, callback) { 
     callback = callback === true ? (function() { this.close(); }) : callback; 

     try { 
     chrome.tabs.create({ 
      url: url 
     }); 

     if(typeof callback === "function") { callback.call(this, url); } 
     } catch(e) { 
     /* Catch errors due to possible permission issues. */ 
     } 
    }, 

    link: function(event, close) { 
     event = event ? event : window.event; 
     event.preventDefault(); 
     this.newtab(event.href, close); 
    }, 

    close: function() { window.self.close(); } 
    }); 
    </script> 
</head> 

<body> 
    <!-- Usage is simple: 

     HTML: 
     <a href="http://example.com/" onclick="master.link(event)" /> 

     JavaScript: 
     master.newtab("http://example.com/", true); 
    --> 
</body> 
</html> 

。只需將鏈接字符串和一個true布爾值添加到master.newtab函數中,使其打開新選項卡,然後關閉彈出窗口。

如果您改變主意關閉彈出窗口,可以用一個函數替換true布爾值,以便在新選項卡創建時沒有任何錯誤時執行。您還可以使用master.link函數從錨點元素調用master.newtab函數。

使用Chrome瀏覽器擴展程序的最佳方式是您永遠不必擔心支持問題! :D

+0

這似乎不起作用,點擊圖標時,它只是沒有響應我使用的是reddit submit bookmarklet js。 – orange

相關問題