0

在我尝试学习如何写谷歌Chrome浏览器扩展,我决定写一个其中一旦点击,在弹出按钮的延伸打开一个新窗口并打开一个新的标签,每图片在页面上。每个标签的url是每个图像的src。 (我认为这不是特别有用,我只是将其作为练习)。谷歌浏览器的行为不同,当弹出被检查

奇怪的是,它的工作原理完全一样,当我有右键点击扩展程序图标,并点击“检查弹出”我期望的那样。它不是按预期工作,当我只是正常使用它。当正常使用时,它只会打开3或4张图像(甚至更奇怪的是,它是每次打开的不同数量的图像)。

这里是我的代码

popup.html

<script type="text/javascript"> 

function getImages() { 
    chrome.tabs.getSelected(null, function(tab){ 
     chrome.tabs.sendRequest(tab.id, {code: "getImages"}, function(images) { 
      console.log(images); 
      openImages(images); 
     }); 
    }); 
} 

function openImages(images) { 
    chrome.windows.create({url: images[0]}, function(window) { 
     for(var i=1; i<images.length; i++) { 
      chrome.tabs.create({windowId: window.id, url: images[i]}); 
     } 
    }); 
} 

</script> 

<button onclick="getImages();">Open images</button> 

contentscript.js

chrome.extension.onRequest.addListener(
    function(request, sender, response) { 
     if(request.code == 'getImages') { 
      console.log("We're in!"); 
      var urls = []; 
      var images = document.getElementsByTagName("img"); 

      for(var i=0; i<images.length; i++) { 
       urls.push(images[i].src); 
      } 
      console.log(urls); 
      response(urls); 
     } 
    } 
); 

任何人有任何想法,这可能是为什么?

回答

1

当您打开新的窗口,它就会集中,从而弹出失去焦点。通常情况下,Chrome会在关闭焦点时关闭扩展程序弹出窗口,但在使用WebInspector检查时会保持打开状态。看来,弹出页面,你的images列表变量被杀死。

3想法了更多的解决这个问题:

  • 而不是一个URL,给URL的数组的windows.create()功能。 (最佳解决方案)
  • 没有给它集中(添加"focused ": false来给予创建函数的对象),并只给创建最后一个标签,当它集中创建的窗口。
  • 从内容脚本或背景页面打开选项卡。
+0

谢谢你,这就是它!在询问问题和回答问题之间,我试着给windows.create函数提供一个字符串数组。它改进了一些东西,但仍然没有显示所有的图像。将'focused:false'添加到新窗口可以解决问题。非常感谢。 – MrMisterMan