[英]Open and Close a Simple Popup Window in Chrome Extension
我有一個 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.windows.create
在 Chrome 中關閉)。
看起來您的 popup_google.js 文件是一個內容腳本。 除了少數例外,內容腳本不能使用 chrome.*API。 這就是你根本不能使用 chrome.window API 的原因。 在類似的說明中,向權限添加“選項卡”會利用 chrome.Tabs API,這不是少數允許用於內容腳本的 chrome API 之一。 嘗試使用matches: [/url pattern/] 字段來限制您的內容腳本將在其中運行的網址,如內容腳本API 中所示。
內容腳本可以完全訪問 DOM,但不能訪問網頁定義的任何變量或函數。 雖然您可以使用 window.open 創建自己的彈出窗口,但是當您希望調用 window.close() 時,內容腳本無法確保它引用了正確的“窗口”變量,因為腳本看到兩個窗口:一個是它使用 window.open() 創建並在頁面的 DOM 上加載窗口。
嘗試使用彈出窗口查看 Chrome 的示例並修改它們以實現您想要的功能。 或者查看其他很棒的 SO解釋來開發一個有效的彈出登錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.