Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关闭由Google Chrome扩展创建的弹出窗口_Javascript_Google Chrome_Google Chrome Extension_Delicious Api - Fatal编程技术网

Javascript 关闭由Google Chrome扩展创建的弹出窗口

Javascript 关闭由Google Chrome扩展创建的弹出窗口,javascript,google-chrome,google-chrome-extension,delicious-api,Javascript,Google Chrome,Google Chrome Extension,Delicious Api,我正在尝试创建一个Chrome扩展来替代DeliciousBookmarklet。我知道已经有一个扩展可以做到这一点,但该扩展的问题是,在您为站点添加书签后,弹出窗口保持打开状态(与使用bookmarklet不同,bookmarklet在提交表单后弹出窗口自动关闭。我重新创建了扩展,遇到了同样的问题 这是我的密码: manifest.json: { "name": "Delicious", "version": "1.0", "description": "Bookmark a si

我正在尝试创建一个Chrome扩展来替代DeliciousBookmarklet。我知道已经有一个扩展可以做到这一点,但该扩展的问题是,在您为站点添加书签后,弹出窗口保持打开状态(与使用bookmarklet不同,bookmarklet在提交表单后弹出窗口自动关闭。我重新创建了扩展,遇到了同样的问题

这是我的密码:

manifest.json:

{
  "name": "Delicious",
  "version": "1.0",
  "description": "Bookmark a site on Delicious",
  "background_page": "background.html",
  "permissions": [ 
    "tabs" 
  ],
  "browser_action": {
    "default_icon": "delicious.png"
  },
  "content_scripts": [
    {
      "matches": ["http://www.delicious.com/save*"],
      "js": ["contentscript.js"]
    }
  ]
}
<html><script>
chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.getSelected(null, function(tab) {
    w = window.open('http://delicious.com/save?url='+
          encodeURIComponent(tab.url)+
          '&title='+encodeURIComponent(tab.title)+
          '&v=5&noui=1&jump=close',
        'deliciousuiv5',
        'location=yes,links=no,scrollbars=no,toolbar=no,width=550,height=550');
  });
});
</script></html>
if (document.URL == 'http://www.delicious.com/save')
{
  alert('closing...');
  self.close();
  alert('should have closed by now');
}
background.html:

{
  "name": "Delicious",
  "version": "1.0",
  "description": "Bookmark a site on Delicious",
  "background_page": "background.html",
  "permissions": [ 
    "tabs" 
  ],
  "browser_action": {
    "default_icon": "delicious.png"
  },
  "content_scripts": [
    {
      "matches": ["http://www.delicious.com/save*"],
      "js": ["contentscript.js"]
    }
  ]
}
<html><script>
chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.getSelected(null, function(tab) {
    w = window.open('http://delicious.com/save?url='+
          encodeURIComponent(tab.url)+
          '&title='+encodeURIComponent(tab.title)+
          '&v=5&noui=1&jump=close',
        'deliciousuiv5',
        'location=yes,links=no,scrollbars=no,toolbar=no,width=550,height=550');
  });
});
</script></html>
if (document.URL == 'http://www.delicious.com/save')
{
  alert('closing...');
  self.close();
  alert('should have closed by now');
}
当我单击Delicious按钮时,弹出窗口显示良好,我可以保存书签,但单击“保存”后,弹出窗口不会关闭。两个警报都会显示,但是
self.close()
似乎什么也没做。当我在contentscript.js中删除URL检查时,弹出窗口会正常出现,第一个警报会立即触发,然后弹出窗口会自动关闭(它应该关闭)

为什么这不起作用?看起来Chrome并没有阻止我做self.close()。Delicious在做什么吗?是其他什么吗

如果需要,这些文件就在这里:[由于drop.io停止工作而删除链接]

请尝试
window.close()
,但这可能也不起作用

当您创建常规窗口(而不是浏览器操作弹出窗口)时,您可以使用背景页面中的
chrome.tabs.remove()
将其关闭。您还可以从背景页面中检测此窗口。例如:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if(changeInfo.status == "loading") {
        if(tab.url == "http://www.delicious.com/save") {
            chrome.tabs.remove(tabId);
        }
    }
});
我不确定Chrome如何将创建的窗口视为选项卡或窗口。如果是窗口,则上面的代码会有点不同。

尝试
window.close()
,但这可能也不起作用

当您创建常规窗口(而不是浏览器操作弹出窗口)时,您可以使用背景页面中的
chrome.tabs.remove()
将其关闭。您还可以从背景页面中检测此窗口。例如:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if(changeInfo.status == "loading") {
        if(tab.url == "http://www.delicious.com/save") {
            chrome.tabs.remove(tabId);
        }
    }
});

我不确定Chrome是如何将创建的窗口视为选项卡还是窗口。如果是窗口,则上述代码会有点不同。

我发现了一个非常简单的解决方法。您只需将所选选项卡设置为True,弹出窗口就会消失,如下所示

// remove popup by selecting the tab
chrome.tabs.getSelected(null, function(tab) {
    chrome.tabs.update(tab.id, { selected: true } )
});

我发现了一个非常简单的解决方法。你只需将所选选项卡设置为True,弹出窗口就会消失,如下所示

// remove popup by selecting the tab
chrome.tabs.getSelected(null, function(tab) {
    chrome.tabs.update(tab.id, { selected: true } )
});

我找到了这个解决方案:
chrome.tabs.update({active:true});
这一行代码关闭浏览器操作的弹出窗口。您甚至不需要在那里传递tab.id,因为默认情况下它被设置为当前选项卡的id。我在后台页面运行它,但它似乎可以在扩展中的任何地方运行。

我找到了这个解决方案:
chrome.tabs.update({active:true});
这一行代码关闭浏览器操作的弹出窗口。您甚至不需要在那里传递tab.id,因为默认情况下它被设置为当前选项卡的id。我在后台页面运行它,但它似乎可以在扩展中的任何地方运行。

getSelected不适用于我,所以我找到了这个解决方案

chrome.tabs.create({url: 'https://www.google.com', active: false});
在background.js中,您只需要

window.close();

getSelected不适用于我,因此我找到了此解决方案

chrome.tabs.create({url: 'https://www.google.com', active: false});
在background.js中,您只需要

window.close();

窗口会自动关闭。如果有任何区别,我运行的是相当默认的Chrome版本。窗口会自动关闭。如果有任何区别,我运行的是相当默认的Chrome版本。window.close()有效。如果您想在向其他选项卡发送请求后关闭弹出窗口,请确保在回调中关闭弹出窗口,并且必须至少向选项卡发送一个空响应。是否可以从内容脚本关闭窗口?window.close()有效。如果您想在向其他选项卡发送请求后关闭弹出窗口,请确保在回调中关闭弹出窗口,并且该选项卡必须至少发送一个空响应。是否可以从内容脚本关闭窗口?
chrome.tabs.getSelected
现在已过时。
chrome.tabs.getSelected
现在已过时。这不幸的是,它对我不起作用。我正在从类似的getSelected()进行更新代码发布在这个页面上,我写了这段代码,根据文档所说,我完全希望它能工作。这可能取决于许多情况。你把这个方法的调用放在哪里?可能在一些没有调用的回调处理程序中,等等…我只存储了对弹出窗口的引用,这样我就可以调用popupRef.Close()这就解决了问题。@offthat-你把引用存储在哪里了?我也想试试。不幸的是,这对我不起作用。我正在从类似的getSelected()更新代码发布在这个页面上,我写了这段代码,根据文档所说,我完全希望它能工作。这可能取决于许多情况。你把这个方法的调用放在哪里?可能在一些没有调用的回调处理程序中,等等…我只存储了对弹出窗口的引用,这样我就可以调用popupRef.Close()这就成功了-你把引用存储在哪里了?我也想试试这个。