wake-up-neo.com

Chrome-Erweiterung; Öffne einen Link von popup.html in einem neuen Tab

Ich mache eine Chrome-Erweiterung und mir wurde in diesem Beitrag hier geholfen. 

Mein Problem ist nun, wie Sie eine neue Registerkarte von Chrome öffnen, die als Link den Link enthält, auf den ich im popup.html geklickt habe. Ich habe versucht, so zu tun, als würde jemand in ihren Antworten ähnliche ähnliche Fragen stellen, wie das Attribut target von <a> auf _blank setzen, aber das einzige Ergebnis ist, dass Chrome eine neue Registerkarte öffnet, aber in der neuen Registerkarte ist meine popup.html. 

Irgendeine Idee, wie man das löst?

Vielen Dank.

38
Advicer

Sie sollten chrome.tabs module verwenden, um den gewünschten Link in einem neuen Tab manuell zu öffnen. Versuchen Sie es mit diesem jQuery-Snippet in der popup.html:

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

Siehe meinen Kommentar https://stackoverflow.com/a/17732609/1340178


Ich hatte das gleiche Problem und dies war mein Ansatz:

  1. Erstellen Sie die popup.html mit dem Link (und die Links funktionieren nicht, wenn Sie darauf klicken, da Chrome sie blockiert).
  2. Erstellen Sie popup.js und verknüpfen Sie es mit der Seite: <script src="popup.js" ></script>
  3. Fügen Sie den folgenden Code zu popup.js hinzu:

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

Das ist alles, Links sollten danach funktionieren.

34
lasantha

Wenn Sie JQuery nicht verwenden möchten, fügen Sie dies in Ihre popup.js ein. Wenn Sie darauf klicken, werden alle Links in einer neuen Registerkarte geöffnet

Denken Sie daran, die Berechtigung "Registerkarten" im manifest.json zu deklarieren 

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

Die anderen Antworten funktionieren. Der Vollständigkeit halber kann nurtarget="_blank" hinzugefügt werden.

Oder wenn Sie bestimmte Links "manuell" hinzufügen möchten, finden Sie hier eine Möglichkeit (basierend auf den anderen Antworten, die bereits hier angegeben sind):

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"});
}
6
rogerdpack

Ich hatte das gleiche Problem. Es sah so aus, als ob Konrads Lösung funktionieren würde, aber es öffnete sich gleichzeitig mehrere Registerkarten. Dies geschah nur nach der ersten Erweiterungsinstallation. Also habe ich es geändert

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

und alles funktioniert wie erwartet.

0
Strabek

Tab-URL zum Freigeben des Blogs in einem neuen Tab senden:

// 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
sonichy