J'écris une extension Chrome, et je veux qu'une fenêtre de connexion apparaisse lorsque les utilisateurs cliquent sur le menu contextuel afin que l'utilisateur puisse entrer le nom d'utilisateur et le mot de passe. Dans Chrome extension, je n'ai trouvé que chrome.pageAction.setPopup
et chrome.browserAction.setPopup
peut être utilisé pour afficher les fenêtres contextuelles, mais elles ne s'affichent que lorsque l'utilisateur clique sur l'icône de l'action de page ou sur l'icône de l'action du navigateur, pas sur le menu contextuel. Bien sûr, je peux utiliser la boîte d'invite javascript pour ce faire, mais le problème est que le mot de passe ne peut pas être masqué dans la boîte d'invite. Je me demande donc s'il existe d'autres moyens de créer une fenêtre contextuelle dans l'extension Chrome.
Merci!
Prends et choisis:
showModalDialog(<String url> [, <object arguments>])
window.open(<String url> [, <String window_name>[, <String windowFeatures>]])
chrome.windows.create(<object createData [, <function callback>]>)
Toutes ces méthodes vous permettent (à votre extension) d'ouvrir une nouvelle fenêtre/boîte de dialogue et de gérer la logique de cette page. Cette page doit être fournie avec votre extension.
Voir Passage de message pour transmettre les données saisies à votre poste.
Les onglets de votre extension ont un accès direct à la page d'arrière-plan en utilisant chrome.runtime.getBackgroundPage
. Je vais démontrer cette fonctionnalité dans cette démo, ainsi qu'une manière conventionnelle de passer des messages:
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>)
et 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>])