chrome扩展开发关闭javascript打开的窗口

chrome扩展开发关闭javascript打开的窗口,javascript,google-chrome-extension,Javascript,Google Chrome Extension,在开发chrome扩展时,我在javascript文件中使用此代码打开了一个新选项卡 myWindow=window.open("www.google.com"); 我可以在打开后立即关闭它,方法是: myWindow.close(); 我尝试了几种javascript方法,让它在关闭前等待几秒钟,但如果我这样做,它就不会关闭。也许是因为它丢失了窗户的id?我不知道。我刚刚开始学习chrome扩展开发 [编辑]我正在提交我必须帮助你们的所有代码。我提醒你,我正在尝试开发一个chrome扩展,

在开发chrome扩展时,我在javascript文件中使用此代码打开了一个新选项卡

myWindow=window.open("www.google.com");
我可以在打开后立即关闭它,方法是:

myWindow.close();
我尝试了几种javascript方法,让它在关闭前等待几秒钟,但如果我这样做,它就不会关闭。也许是因为它丢失了窗户的id?我不知道。我刚刚开始学习chrome扩展开发

[编辑]我正在提交我必须帮助你们的所有代码。我提醒你,我正在尝试开发一个chrome扩展,当我点击扩展创建的工具栏上的按钮时,就会发生这个动作。(代码取自此处:)

HTML文件

<!doctype html>
<html>
<head>
<title>Getting Started Extension's Popup</title>
<style>
  body {
    min-width: 357px;
    overflow-x: hidden;
  }

  img {
    margin: 5px;
    border: 2px solid black;
    vertical-align: middle;
    width: 75px;
    height: 75px;
  }
  </style>
 <script src="popup.js"></script>
</head>
<body>
</body>
</html>

这不能因为浏览器的安全框架而延迟。要打开/关闭窗口,必须事先发生用户启动的事件。

由于浏览器的安全框架,这不能延迟。要打开/关闭窗口,必须事先发生用户启动的事件。

您似乎是从扩展的弹出窗口执行此操作的。当弹出窗口失去焦点时,它们会关闭,所以我猜想,当新窗口获得焦点时,它的执行环境会被破坏。因此,您在那里设置的任何延迟事件都无法执行

您的弹出窗口似乎是一个空窗口,它所做的唯一事情就是打开窗口。在这种情况下,您不需要定义弹出窗口。您可以使用从后台页面执行此操作

如果确实需要从弹出窗口启动操作,可以在后台页面中定义一个函数,并使用
chrome.runtime.getBackgroundPage(函数(w){w.yourFunction();})
调用它


另外,请记住,在扩展中,您有可用的和API。

您似乎是在扩展的弹出窗口中执行此操作的。当弹出窗口失去焦点时,它们会关闭,所以我猜想,当新窗口获得焦点时,它的执行环境会被破坏。因此,您在那里设置的任何延迟事件都无法执行

您的弹出窗口似乎是一个空窗口,它所做的唯一事情就是打开窗口。在这种情况下,您不需要定义弹出窗口。您可以使用从后台页面执行此操作

如果确实需要从弹出窗口启动操作,可以在后台页面中定义一个函数,并使用
chrome.runtime.getBackgroundPage(函数(w){w.yourFunction();})
调用它



另外,请记住,在扩展中,您有可用的和API。

您是否尝试过
setInterval
?@Jacedc是的,我尝试过。它似乎并不关心接下来会发生什么,因为它会打开一个新的标签。我说的对吗?这可能是你代码中的其他内容,因为它是有效的:@Markasoftware这是一个chrome扩展。我不知道清单或html文件中是否有什么东西阻止了这一点。我是新手,我认为javascript会正常工作,这是我在js文件中的全部代码。你试过
setInterval
?@Jacedc是的,我试过了。它似乎并不关心接下来会发生什么,因为它会打开一个新的标签。我说的对吗?这可能是你代码中的其他内容,因为它是有效的:@Markasoftware这是一个chrome扩展。我不知道清单或html文件中是否有什么东西阻止了这一点。我是新手,我认为javascript会正常工作,这是我在js文件中的全部代码。我不确定这一点。我的应用关闭一个没有用户事件的窗口。它不是扩展,但仍然是。如果我将close()间隔设置为小于200ms,则可以关闭窗口。这可能是因为它没有足够的时间将第一个字节发送到网络。@user2773389这可能是因为它仍然处于“用户启动的事件”阈值中。网络请求几乎立即被触发。@nietonfir每当代码的执行在事件循环中排队时(例如,使用
setTimeout
),则“用户启动的事件”状态将丢失。你最后的评论是错误的。答案部分正确:要关闭窗口,不需要用户交互。当使用
window.open()
打开它时,它是允许的。对此我不确定。我的应用关闭一个没有用户事件的窗口。它不是扩展,但仍然是。如果我将close()间隔设置为小于200ms,则可以关闭窗口。这可能是因为它没有足够的时间将第一个字节发送到网络。@user2773389这可能是因为它仍然处于“用户启动的事件”阈值中。网络请求几乎立即被触发。@nietonfir每当代码的执行在事件循环中排队时(例如,使用
setTimeout
),则“用户启动的事件”状态将丢失。你最后的评论是错误的。答案部分正确:要关闭窗口,不需要用户交互。使用
window.open()。是异步的,因为它可能没有加载事件页,并且需要先加载,所以它实际上是
chrome.runtime.getBackgroundPage(函数(bgWindow){bgWindow.yourFunction();})
@RobW,啊,我快速看了一眼,没有注意到事件页面的焦点和签名的变化。再次感谢。用于。是异步的,因为它可能没有加载事件页,并且需要先加载,所以它实际上是
chrome.runtime.getBackgroundPage(函数(bgWindow){bgWindow.yourFunction();})
@RobW,啊,我快速看了一眼,没有注意到事件页面的焦点和签名的变化。再次感谢。
{
"manifest_version": 2,

"name": "myExtension",
"description": "This extension is under development",
"version": "1.0",

"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": ["www.google.com"]
}