2012-01-18 3 views
33

Я занимаюсь расширением Chrome, и мне помогли в этом сообщении here.Расширение Chrome; открыть ссылку из popup.html на новой вкладке

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

Любая идея, как решить эту проблему?

Спасибо.

+0

Возможный дубликат [Как сделать popup.html ссылки открытыми в закладке?] (Http: // stackoverflow.com/questions/4549869/how-to-make-popup-html-links-open-in-tab) – rogerdpack

ответ

57

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

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

Не должен ли атрибут a быть помещен как URL 'href'. В обоих случаях это не работает в обоих случаях. Он открывает мне вкладку с этим URL: chrome-extension: // ceapmkdonphjngfdcjcoahdmkenpbgpn /? Action = read & idnotizia = 71189 – Advicer

+0

Вы правы насчет 'href', извините за это - я исправил свой ответ. Вам нужно указать полный URL-адрес в href, если вы хотите его открыть. В настоящее время у вас есть такие ссылки, как «изменить их на полные URL-адреса» '. –

31

Смотрите мой комментарий https://stackoverflow.com/a/17732609/1340178


Я была такая же проблема, и это был мой подход:

  1. Создание всплывающего окна. 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}); 
          }; 
         })(); 
        } 
    }); 
    

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

+0

приятное решение, спасибо. –

+0

Отлично. Спасибо. – user3256143

18

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

Не забудьте разыгрывающий «вкладки» разрешение в манифесте .json

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

Намного лучше, чем версия jQuery, спасибо! – juanignaciosl

+1

Я бы предложил вместо этого использовать «activeTab»: https://developer.chrome.com/extensions/activeTab –

2

Другие ответы работают. Для полноты, вы можете также just addtarget="_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

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

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

и все работает должным образом.

Смежные вопросы