Расширение Chrome;открыть ссылку из popup.html в новой вкладке - PullRequest
40 голосов
/ 18 января 2012

Я делаю расширение для Chrome, и мне помогли в этом посте здесь .

Моя проблема сейчас заключается в том, как открыть новую вкладку Chrome, в качестве URL которой указана ссылка, которую я щелкнул в popup.html. Я пытался сделать так, как кто-то предложил в своих ответах на другой похожий вопрос, например, установив атрибут <a> target в _blank, но единственный результат в том, что chrome открывает новую вкладку, но в новой вкладке есть мое всплывающее окно. HTML.

Есть идеи, как это решить?

Спасибо.

Ответы [ 6 ]

60 голосов
/ 18 января 2012

Вы должны использовать модуль chrome.tabs , чтобы вручную открыть нужную ссылку в новой вкладке.Попробуйте использовать этот фрагмент jQuery в вашем popup.html:

$(document).ready(function(){
   $('body').on('click', 'a', function(){
     chrome.tabs.create({url: $(this).attr('href')});
     return false;
   });
});
35 голосов
/ 18 июля 2013

См. Мой комментарий 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});
                };
            })();
        }
    });
    

Вот и все, после этого ссылки должны работать.

20 голосов
/ 06 октября 2014

Если вы не хотите использовать JQuery, вставьте его в ваш popup.js, и при нажатии все ссылки откроются в новой вкладке

Не забудьте объявить разрешение "вкладки" вmanifest.json

window.addEventListener('click',function(e){
  if(e.target.href!==undefined){
    chrome.tabs.create({url:e.target.href})
  }
})
7 голосов
/ 20 октября 2016

Остальные ответы работают. Для полноты, другой способ состоит в том, чтобы просто добавить target="_blank"

Или, если вы хотите «вручную» добавить определенные ссылки, вот способ (на основе других ответов, уже здесь):

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"});
}
0 голосов
/ 17 февраля 2019

Отправить URL-адрес вкладки, чтобы поделиться блогом в новой вкладке:

// 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});
    };
});
0 голосов
/ 05 ноября 2016

У меня была такая же проблема.Похоже, решение Конрада сработало, но оно открыло сразу несколько вкладок.Это произошло только после первой установки расширения.Поэтому я изменил его на

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

и все работает как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...