Javascript 在Chrome Extension中打开和关闭一个简单的弹出窗口

Javascript 在Chrome Extension中打开和关闭一个简单的弹出窗口,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我有一个Chrome扩展应该允许用户通过弹出窗口登录Google,因为它不会显示在iframe中。我使用window.open()执行此操作,除了用户登录后无法关闭弹出窗口外,该操作运行良好 我一直在尝试使用chrome.windows。创建而不是窗口。打开,希望通过URL检测到他们已成功登录后能够关闭弹出窗口,但没有成功 在popup_google.js中,我有一个简单的功能: function login(login_url) { // var win = window.open(l

我有一个Chrome扩展应该允许用户通过弹出窗口登录Google,因为它不会显示在iframe中。我使用
window.open()
执行此操作,除了用户登录后无法关闭弹出窗口外,该操作运行良好

我一直在尝试使用
chrome.windows。创建
而不是
窗口。打开
,希望通过URL检测到他们已成功登录后能够关闭弹出窗口,但没有成功

popup_google.js
中,我有一个简单的功能:

function login(login_url) {
    // var win = window.open(login_url, "windowname1", 'width=800, height=600');
    chrome.windows.create({'url': 'http://stackoverflow.com/', 'type': 'popup'}, function(window) { });
}
登录函数是通过以下类似的方式调用的:
“onclick”

<a href='#' onClick='login("https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=http%3A%2F%2Fdev.sbceoportal.org%2Fcastest%2Fwp-login.php&client_id=191567976061-9uksb59gedrtlsmoeo1fouov94370j96.apps.googleusercontent.com&scope=openid+email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&access_type=online&approval_prompt=auto&state=d96bdddc11%257Chttp%253A%252F%252Fdev.sbceoportal.org%252Fcastest%252Fportal%252F");' id="loginText"> Click here to login </a>


我一辈子都无法使用
chrome.windows.create
打开一个新的弹出窗口,即使是以您在这里看到的最简单的形式,但是
window.open
就像一个符咒一样工作(我似乎无法在chrome中关闭它)。

看起来您的弹出窗口\u google.js文件是一个内容脚本。内容脚本不能使用chrome.*API,只有少数例外。这就是为什么您根本不能使用chrome.window API的原因。类似地,向权限中添加“选项卡”也利用了chrome.tabs API,它不是为数不多的允许用于内容脚本的chromeapi之一。尝试使用matches:[/url pattern/]字段来限制内容脚本将在其中运行的url,如中所示

内容脚本可以完全访问DOM,但不能访问网页定义的任何变量或函数。虽然您可以使用window.open创建自己的弹出窗口,但当您希望调用window.close()时,内容脚本无法确保它引用了正确的“window”变量,因为脚本会看到两个窗口:一个是使用window.open()创建的窗口,另一个是加载到页面DOM中的窗口


尝试使用弹出窗口查看Chrome,并对其进行修改以实现所需的功能。或者查看其他优秀的SO来开发一个可用的弹出式登录。

您是否向清单中添加了选项卡权限?如果在扩展的弹出式页面中,请不要在html中使用内嵌js处理程序。将它移动到一个单独的
popup.js
文件中,在关闭
标记之前,用
将它加载到
popup.html
中。好的,我可以添加选项卡权限并添加了:“可选权限”:[“选项卡”],“权限”:[“选项卡”],我仍然无法让这一行正常工作:chrome.windows.create({'url':'','type':'popup'},函数(窗口){};感谢您的回复,我阅读了更多关于内容和背景脚本的内容。我正在看一些例子,这些例子似乎与我想做的事情有关——定义一个监听器,它可以在点击谷歌登录链接时检测。不幸的是,当我安装我找到的两个示例的示例代码时,它不再工作。这些就是我查过的例子:你知道这些例子有哪些地方做错了,或者哪些地方需要更新/更改吗?谢谢呃,在一个函数中没有看到任何错误,我看到一个关于未定义的函数的属性的错误“content_script.js:6 Uncaught TypeError:无法读取未定义的属性‘click’:您可以在这里看到我如何查找错误的屏幕广播。就像我说的,我是新来的,所以我可能找不到合适的地方。谢谢我今晚才能看你的电影。但听起来您正在查看Chrome中的开发者工具控制台(可按F12键访问),这是检查错误的正确方法。听起来您试图构建的功能比一个内容脚本所能处理的更复杂。我认为除了内容脚本之外,还需要使用事件页面(即持久性为false的后台页面)和消息传递,因为一旦关闭弹出窗口,内容脚本中的所有JS执行都将停止。下面这个简单得多的例子:我自己做的,没有错误。从那里,我认为您将能够构建出您正在制作的弹出式登录屏幕所需的功能。