Розширення Chrome: Як відкрити посилання в новій вкладці?


79

У моїй папці Stackoverflow у мене є stackoverflow.icoі 2 файли нижче. Імпортуючи його в Chrome, він відображає піктограму в адресному рядку, але коли я натискаю на неї, Chrome не відкриває нової вкладки. Що я роблю не так?

manifest.json

{
  "name": "Stackoverflow",
  "version": "1",
  "browser_action":
  {
    "default_icon": "stackoverflow.ico"
  },
  "background":
  {
    "page": "index.html"
  },
  "permissions": ["tabs"],
  "manifest_version": 2
}

index.html

<html>
  <head>
    <script>
      chrome.browserAction.onClicked.addListener(function(activeTab)
      {
        var newURL = "http://stackoverflow.com/";
        chrome.tabs.create({ url: newURL });
      });
    </script>
  </head>
</html>

Відповіді:


119

Проблема в тому, що ви порушуєте маніфест версії 2content security policy . Щоб виправити це, вам потрібно лише позбутися вбудованого сценарію, в даному випадку вашого фону page. Перетворіть його у такий фон script:

manifest.json

"background":{
  "scripts": ["background.js"]
},

background.js

chrome.browserAction.onClicked.addListener(function(activeTab){
  var newURL = "http://stackoverflow.com/";
  chrome.tabs.create({ url: newURL });
});

Якщо з якихось причин вам це потрібно для того, щоб це була сторінка, тоді просто включіть сценарій як зовнішній файл і оголосіть його як сторінку, як раніше.


як я можу надіслати newURL з popup.js?
Nikhil

20

У моєму випадку мені потрібно було відкрити посилання на новій вкладці, коли я клацнув на посилання у спливаючому вікні розширення, це нормально працювало з targetатрибутом _blank:

<a href="http://www.example.com" target="_blank">Example</a>

5
Ну, це відкриє нову вкладку в браузері, але закриє спливаюче вікно (що не завжди бажано).
fvrab

5

Я віддав би перевагу більш простому рішенню - просто додайте дію до onclick

$('body').on('click', 'a[target="_blank"]', function(e){
    e.preventDefault();
    chrome.tabs.create({url: $(this).prop('href'), active: false});
    return false;
});

Це відкриє всі посилання (навіть посилання, які були динамічно створені), які мають атрибут target = "_ blank" на новій вкладці, не втрачаючи спливаючого фокусу.


де ти називаєш цього? я маю на увазі, це написано під content.js або background.js?
gumuruh

це написано в content.js
fvrab
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.