私の目標は非常に単純です。ユーザーがユーザー名とパスワードを指定してログインをクリックできるパネルが必要です。次に、資格情報を確認するために webrequest を実行し、ユーザーに応答を表示します。
main.js でリクエストを実行し、それを返す必要があることがわかりました。したがって、フォームが送信されると、URL を作成し、要求を実行する main.js にメッセージを送信します。それはうまくいきます、応答も正しいです。ただし、応答をパネルに送り返したい場合、次のエラーが発生します。
Error: The page is currently hidden and can no longer be used until it is visible again.
resource://jid1-aaautmtqen7pta-at-jetpack/addon-sdk/lib/sdk/content/worker.js 404
Traceback (most recent call last):
File "resource://jid1-aaautmtqen7pta-at-jetpack/addon-sdk/lib/sdk/net/xhr.js", line 126, in
self._orsc.apply(self, arguments);
File "resource://jid1-aaautmtqen7pta-at-jetpack/addon-sdk/lib/sdk/request.js", line 91, in onreadystatechange
emit(target, 'complete', response);
File "resource://jid1-aaautmtqen7pta-at-jetpack/addon-sdk/lib/sdk/event/core.js", line 83, in emit
for each (let item in emit.lazy.apply(emit.lazy, arguments)) {
File "resource://jid1-aaautmtqen7pta-at-jetpack/addon-sdk/lib/sdk/event/core.js", line 101, in lazy
yield listeners.shift().apply(target, args);
File "resource://jid1-aaautmtqen7pta-at-jetpack/domain/lib/main.js", line 21, in hosters<.onComplete
popup.port.emit("handleloginresponse",response);
File "resource://jid1-aaautmtqen7pta-at-jetpack/addon-sdk/lib/sdk/content/worker.js", line 369, in
emit: function () self._emitEventToContent(Array.slice(arguments))
File "resource://jid1-aaautmtqen7pta-at-jetpack/addon-sdk/lib/sdk/content/worker.js", line 404, in _emitEventToContent
throw new Error(ERR_FROZEN);
また、パネルを再度開くか、代わりに postMessage() を使用してみました。何も機能していないようです。コンテンツをパネルに戻すことができません! どんな助けも感謝します!
これは私のmain.jsです
var data = require("self").data;
var popup = require("panel").Panel({
width: 212,
height: 200,
contentURL: data.url("popup.html"),
contentScriptFile: [data.url("jquery.js"),data.url("popup.js")]
});
var Request = require("request").Request;
popup.port.on("handlelogin", function (url) {
console.log("requesting " + url);
var hosters = Request({
url: url,
onComplete: function (response) {
console.log(response.status);
console.log("emmiting handleloginresponse");
popup.port.emit("handleloginresponse",response);
}
}).get();
});
require("widget").Widget({
label: "my label",
id: "pop-up",
contentURL: data.url("16.png"),
panel: popup
});
popup.html
<html>
<head>
</head>
<body>
<form id="loginform">
<input name="user" placeholder="User" id="userfield" />
<input type="password" name="pass" placeholder="Password" id="passfield"/>
<input type="submit" id="loginbutton" value="Log in " />
</form>
</body>
</html>
popup.js
$('#loginform').submit(function (event) {
var url = 'https://mydomain.com?user=' + encodeURIComponent($('#loginform')[0].user.value) + '&pass=' + encodeURIComponent($('#loginform')[0].pass.value) + '&something=something;
self.port.emit("handlelogin",url);
});
self.on("handleloginresponse", function(data) {
console.log("got a handleloginresponse!");
console.log(data);
});