Ceci est mon fichier background.html, il fonctionne bien lors de l'ouverture dans l'onglet actuel mais je veux qu'il s'ouvre dans le nouvel onglet, que fais-je de mal?

<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>
9
orange 10 déc. 2011 à 19:01

3 réponses

Meilleure réponse

Vous devriez relire la chrome.tabs.create documentation. Vous lui passez des paramètres invald. Vous utilisez également location qui provient du document background.html et non du document de page Web attendu par le code au lieu du paramètre tab transmis à l'écouteur 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>
10
abraham 12 déc. 2011 à 23:02

Vous pouvez essayer ceci

<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>
2
user219882 10 déc. 2011 à 15:23
<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>

Si vous insistez pour utiliser une fenêtre contextuelle et souhaitez la fermer dès son ouverture, utilisez ce qui précède. Ajoutez simplement la chaîne de lien et un true booléen à la fonction master.newtab pour qu'elle ouvre le nouvel onglet, puis fermez la fenêtre contextuelle.

Si vous changez d'avis sur la fermeture de la fenêtre contextuelle, vous pouvez remplacer le booléen true par une fonction à exécuter si le nouvel onglet a été créé sans aucune erreur. Vous pouvez également utiliser la fonction master.link pour appeler la fonction master.newtab à partir d'un élément d'ancrage.

La meilleure chose à propos de l'utilisation des extensions Chrome est que vous n'avez jamais à vous soucier des problèmes de support! :RÉ

1
Mikett 10 déc. 2011 à 18:49