簡體   English   中英

在 Chrome 擴展程序中打開和關閉一個簡單的彈出窗口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM