Открытие новой вкладки в расширении Google Chrome - PullRequest
6 голосов
/ 10 декабря 2011

Это мой файл background.html, он отлично работает при открытии в текущей вкладке, но я хочу, чтобы он открывался в новой вкладке, что я делаю не так?

<html>
<head>
<script>
  // Called when the user clicks on the browser action.
  chrome.browserAction.onClicked.addListener(function(tab) {
    var action_url = "javascript:location.href='http://www.reddit.com/submit?url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title)";
    chrome.tabs.create(tab.id, {url: action_url}, function(tab));
  });
</script>
</head>
</html>

Ответы [ 3 ]

8 голосов
/ 13 декабря 2011

Вы должны прочитать chrome.tabs.create документацию еще раз. Вы передаете это неверные параметры. Вы также используете location, который взят из документа background.html, а не документа веб-страницы, который ожидает код, вместо параметра tab, передаваемого слушателю chrome.browserAction.onClicked.

<html>
<head>
<script>
  // Called when the user clicks on the browser action.
  chrome.browserAction.onClicked.addListener(function(tab) {
    var action_url = "http://www.reddit.com/submit?url=" + encodeURIComponent(tab.href) + '&title=' + encodeURIComponent(tab.title);
    chrome.tabs.create({ url: action_url });
  });
</script>
</head>
</html>
2 голосов
/ 10 декабря 2011

Вы можете попробовать это

<html>
...
<body>
    <script>
    function createTab() {
        chrome.tabs.create({url: "http://www.stackoverflow.com"});
    }
    </script>
    <a href="#" onclick="createTab();">Create a new tab</a>
</body>
</html>
0 голосов
/ 10 декабря 2011
<html>
 <head>
  <script type="text/javascript">
   window.master = ({
     newtab: function(url, callback) {
       callback = callback === true ? (function() { this.close(); }) : callback;

       try {
         chrome.tabs.create({
           url: url
         });

         if(typeof callback === "function") { callback.call(this, url); }
       } catch(e) {
         /* Catch errors due to possible permission issues. */
       }
     },

     link: function(event, close) {
       event = event ? event : window.event;
       event.preventDefault();
       this.newtab(event.href, close);
     },

     close: function() { window.self.close(); }
   });
  </script>
 </head>

 <body>
  <!-- Usage is simple:

        HTML:
         <a href="http://example.com/" onclick="master.link(event)" />

        JavaScript:
         master.newtab("http://example.com/", true);
  -->
 </body>
</html>

Если вы настаиваете на использовании всплывающего окна и хотите, чтобы оно закрывалось сразу после открытия, используйте то, что указано выше.Просто добавьте строку ссылки и логическое значение true в функцию master.newtab, чтобы открыть новую вкладку, а затем закрыть всплывающее окно.

Если вы передумаете закрыть закрывающее окно, вы можете заменитьtrue логическое значение с функцией, выполняемой, если новая вкладка была создана без каких-либо ошибок.Вы также можете использовать функцию master.link для вызова функции master.newtab из элемента привязки.

Лучшее в использовании расширений Chrome - вам никогда не придется беспокоиться о проблемах поддержки!: D

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