Chrome扩展程序;在新标签页中打开popup.html的链接

时间:2012-01-18 19:08:25

标签: google-chrome google-chrome-extension

我正在进行Chrome扩展,我在这篇文章here中得到了帮助。

我现在的问题是如何打开一个新的Chrome标签,其中包含我在popup.html中点击的链接作为网址。我尝试像在其他类似问题的答案中建议,例如将<a>的属性target设置为_blank,但唯一的结果是Chrome确实打开了一个新标签但在新标签中是我的popup.html。

知道如何解决这个问题吗?

感谢。

9 个答案:

答案 0 :(得分:60)

您应该使用chrome.tabs模块在​​新标签中手动打开所需的链接。尝试在popup.html中使用此jQuery代码段:

$(document).ready(function(){
   $('body').on('click', 'a', function(){
     chrome.tabs.create({url: $(this).attr('href')});
     return false;
   });
});

答案 1 :(得分:35)

查看我的评论https://stackoverflow.com/a/17732609/1340178


我有同样的问题,这是我的方法:

  1. 使用链接创建popup.html(当Chrome屏蔽它们时,链接无法正常工作)。
  2. 创建popup.js并将其链接到页面:<script src="popup.js" ></script>
  3. 将以下代码添加到popup.js:

    document.addEventListener('DOMContentLoaded', function () {
        var links = document.getElementsByTagName("a");
        for (var i = 0; i < links.length; i++) {
            (function () {
                var ln = links[i];
                var location = ln.href;
                ln.onclick = function () {
                    chrome.tabs.create({active: true, url: location});
                };
            })();
        }
    });
    
  4. 就是这样,链接应该在那之后起作用。

答案 2 :(得分:20)

如果您不想使用JQuery,请将其插入到popup.js中,点击后将在新标签页中打开所有链接

请记住在manifest.json

中声明“tabs”权限
window.addEventListener('click',function(e){
  if(e.target.href!==undefined){
    chrome.tabs.create({url:e.target.href})
  }
})

答案 3 :(得分:7)

The other answers work. For completeness, another way is to just add target="_blank"

Or if you have want to "manually" add particular links, here's a way (based on the other answers already here):

popup.html

<a id="index_link">My text</a>.

popup.js

document.addEventListener('DOMContentLoaded', function() {
   var y = document.getElementById("index_link");
   y.addEventListener("click", openIndex);
}

function openIndex() {
 chrome.tabs.create({active: true, url: "http://my_url"});
}

答案 4 :(得分:1)

现代JS中更简洁的版本:

document.addEventListener('DOMContentLoaded', function () {
  for (const anchor of document.getElementsByTagName('a')) {
    anchor.onclick = () => {
      chrome.tabs.create({active: true, url: anchor.href});
    };
  };
});

答案 5 :(得分:0)

我遇到了同样的问题。看起来康拉德的解决方案会起作用,但它会立刻打开多个标签。这仅在第一次扩展安装后发生。所以我把它改成了

if (e.target.classList.contains("a-link")) {
    chrome.tabs.create({url: $(e.target).attr('href')});
    return false;
}

并且一切正常。

答案 6 :(得分:0)

发送标签网址以在新标签页中共享博客:

// popup.js
chrome.tabs.query({ active: true, currentWindow: true }, function(tabs){        
    var url = tabs[0].url;
    var title = tabs[0].title;
    document.getElementById('linkQZone').onclick = function () {
        var url1 = 'https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=' + url + '&title=' + title + '&desc=&summary=&site=';
        chrome.tabs.create({active: true, url: url1});
    };

    document.getElementById('linkQQ').onclick = function () {
        var url1 = 'https://connect.qq.com/widget/shareqq/index.html?url=' + url + '&title=' + title + '&desc=&summary=&site=';
        chrome.tabs.create({active: true, url: url1});
    };
});

答案 7 :(得分:0)

使用ctrl键或中键单击打开

$('body').on('click auxclick', 'a', e => {
    if (e.ctrlKey || e.button == 1) {
        e.preventDefault();
        chrome.tabs.create({ url: e.currentTarget.href, selected: false});
    }
});

答案 8 :(得分:0)

2020年的语法更加简洁和实际:

document.addEventListener('DOMContentLoaded', () => {
  const links = document.querySelectorAll("a");

  links.forEach(link => {
    const location = link.getAttribute('href');
    link.addEventListener('click', () => chrome.tabs.create({active: true, url: location}));
  });
});