我有Chrome扩展程序应允许用户通过弹出窗口登录Google,因为它不会显示在iframe中。我正在使用window.open()
执行此操作,但工作正常,但用户登录后无法关闭弹出窗口。
我一直在尝试使用chrome.windows.create
而不是window.open
,但是一旦我通过他们已成功登录的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中关闭它。)
答案 0 :(得分:1)
您的popup_google.js文件看起来像是一个内容脚本。除少数exceptions外,内容脚本不能使用chrome。* API。这就是为什么你根本不能使用chrome.window API的原因。在类似的说明中,向权限添加“tabs”使用chrome.Tabs API,它不是内容脚本中为数不多的允许的chrome API之一。尝试使用匹配项:[/ url pattern /]字段来限制运行内容脚本的网址,如content script API所示。
内容脚本可以完全访问DOM,但不能访问网页定义的任何变量或函数。虽然您可以使用window.open创建自己的弹出窗口,但是当您希望调用window.close()时,内容脚本无法确定它是否引用了正确的“window”变量,因为脚本会看到两个窗口:一个窗口使用window.open()创建并在页面的DOM上加载窗口。
尝试使用弹出窗口查看Chrome的examples并修改它们以实现所需的功能。或者查看其他优秀的SO explanations以开发有效的弹出窗口。