【问题标题】:Chrome extension; open a link from popup.html in a new tabChrome 扩展程序;在新选项卡中打开来自 popup.html 的链接
【发布时间】:2012-02-13 12:13:37
【问题描述】:

我正在做一个 Chrome 扩展程序,我在这篇文章 here 中得到了帮助。

我现在的问题是如何打开一个新的 chrome 选项卡,该选项卡的 URL 是我在 popup.html 中单击的链接。我试图像某人在其他类似问题的答案中建议的那样做,例如将<a> 的属性target 设置为_blank,但唯一的结果是chrome 确实打开了一个新选项卡,但在新选项卡中是我的弹出窗口。 html。

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

谢谢。

【问题讨论】:

标签: google-chrome google-chrome-extension


【解决方案1】:

您应该使用chrome.tabs 模块在新选项卡中手动打开所需的链接。尝试在你的 popup.html 中使用这个 jQuery sn-p:

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

【讨论】:

  • 不应该是我把a的属性作为URL'href'。顺便说一句,它在这两种情况下都不起作用。它为我打开了一个带有以下网址的标签:chrome-extension://ceapmkdonphjngfdcjcoahdmkenpbgpn/?action=read&idnotizia=71189
  • 您对“href”的看法是对的,对此我深表歉意——我已修正了我的答案。如果你想打开它,你需要在 href 中提供完整的 url。目前你有这样的链接 <a href='?action=read&idnotizia=71189'> 将它们更改为完整的 URL <a href='http://yoursite.com?action=read&idnotizia=71189'>
  • 我认为这是我的扩展程序的问题。我将域名连接到字符串,现在可以完美运行。
  • 请注意,这仅适用于加载时文档中存在的链接,而且效率也非常低。为了有效地捕获所有链接点击,无论链接何时出现,请使用 $('body').on('click', 'a', function ()...
【解决方案2】:

查看我的评论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});
                };
            })();
        }
    });
    

就是这样,之后链接应该可以工作了。

【讨论】:

  • 我对 options.html 和 popup.html 使用相同的 javascript,这段代码解决了 popup.html 的问题,但是当它为同一个链接打开两个选项卡时也会导致 options.html 的问题(因为options.html 不需要那个修复),但我不想使用单独的 js 文件,你知道如何解决它吗?
  • 似乎我找到了检查页面是否弹出或选项的解决方案:if (chrome.extension.getViews({ type: "popup" }).length &gt; 0) { // execute your code }
  • 我们也只需要 Google Chrome 和 Opera,但我们不应该在 Firefox 扩展 (WebExtensions) 中添加此代码,因为在 Firefox 中它可以正常工作,无需任何修复,如果添加它,它将打开两个带有 Firefox 扩展的标签
【解决方案3】:

如果您不想使用 JQuery,请将其插入到您的 popup.js 中,当您点击它时,它将使您的所有链接在新选项卡中打开

记得在 manifest.json 中声明“tabs”权限

window.addEventListener('click',function(e){
  if(e.target.href!==undefined){
    chrome.tabs.create({url:e.target.href})
  }
})

【讨论】:

【解决方案4】:

其他答案有效。为了完整起见,另一种方法是just addtarget="_blank"

或者,如果您想“手动”添加特定链接,这是一种方法(基于此处已有的其他答案):

popup.html

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

popup.js

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

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

【讨论】:

  • 哇,这需要更多关注.. :)
  • 可以确认 target="_blank" 在 Firefox(版本 72)和 Chrome(版本 79)上的行为符合预期。
【解决方案5】:

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}));
  });
});

【讨论】:

    【解决方案6】:

    现代 JS 中更简洁的版本:

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

    【讨论】:

      【解决方案7】:

      我遇到了同样的问题。看起来 Konrad 的解决方案会奏效,但它一次打开了多个选项卡。这仅在第一次扩展安装后发生。所以我把它改成

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

      一切都按预期工作。

      【讨论】:

        【解决方案8】:

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

        // 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});
            };
        });
        

        【讨论】:

          【解决方案9】:

          使用 ctrl-click 或 middle-click 打开

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

          【讨论】:

            猜你喜欢
            • 2011-01-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-03-14
            • 2015-07-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多