私はChrome拡張機能を作成しています。ユーザーがコンテキストメニューをクリックすると、ユーザーがユーザー名とパスワードを入力できるように、ログインウィンドウがポップアップされるようにします。 Chrome拡張機能では、chrome.pageAction.setPopup
とchrome.browserAction.setPopup
のみがポップアップウィンドウの表示に使用できますが、ページアクションのアイコンまたはブラウザアクションのアイコンがクリックされたときにのみポップアップが表示されます。コンテキストメニュー。もちろん、JavaScriptプロンプトボックスを使用してこれを行うことができますが、問題はパスワードがプロンプトボックスでマスクできないことです。したがって、Chrome拡張機能でポップアップウィンドウを作成する他の方法があるかどうか疑問に思っています。
ありがとう!
選んで決める:
showModalDialog(<String url> [, <object arguments>])
window.open(<String url> [, <String window_name>[, <String windowFeatures>]])
chrome.windows.create(<object createData [, <function callback>]>)
これらのすべてのメソッドを使用すると、拡張機能で新しいウィンドウ/ダイアログを開き、そのページのロジックを処理できます。このページは、拡張機能とともにパッケージ化する必要があります。
入力したデータを拡張機能に渡すには、 メッセージの受け渡し を参照してください。
拡張機能内のタブは、 _chrome.runtime.getBackgroundPage
_ を使用してバックグラウンドページに直接アクセスできます。このデモでは、この機能と、従来のメッセージパッシングの方法を示します。
manifest.json
__{
"name": "Dialog tester",
"version": "1.0",
"manifest_version": 2,
"background": {
"scripts": ["background.js"],
"persistent": false
},
"content_scripts": [{
"matches": ["<all_urls>"],
"js": ["open-dialog.js"]
}]
}
_
background.js
__// Handle requests for passwords
chrome.runtime.onMessage.addListener(function(request) {
if (request.type === 'request_password') {
chrome.tabs.create({
url: chrome.extension.getURL('dialog.html'),
active: false
}, function(tab) {
// After the tab has been created, open a window to inject the tab
chrome.windows.create({
tabId: tab.id,
type: 'popup',
focused: true
// incognito, top, left, ...
});
});
}
});
function setPassword(password) {
// Do something, eg..:
console.log(password);
};
_
open-dialog.js
__if (confirm('Open dialog for testing?'))
chrome.runtime.sendMessage({type:'request_password'});
_
dialog.html
__<!DOCTYPE html><html><head><title>Dialog test</title></head><body>
<form>
<input id="pass" type="password">
<input type="submit" value="OK">
</form>
<script src="dialog.js"></script>
</body></html>
_
dialog.js
__document.forms[0].onsubmit = function(e) {
e.preventDefault(); // Prevent submission
var password = document.getElementById('pass').value;
chrome.runtime.getBackgroundPage(function(bgWindow) {
bgWindow.setPassword(password);
window.close(); // Close dialog
});
};
_
chrome.runtime.sendMessage(<request>, <function callback>)
および _chrome.runtime.onMessage
_.addListener(<function listener>)
chrome.extension.getURL(<String path>)
chrome.runtime.getBackgroundPage(<function callback>)
chrome.tabs.create(<object createData> [, <function callback>])
chrome.windows.create(<object createProperties> [, <function callback>])