Chrome 扩展程序:弹出式窗口.html会在新标签页中关闭并打开响应
Chrome Extension: popup.html closes and opens response in a new tab?
我的弹出窗口中有一个登录表单.html它调用以下函数...
chrome.extension.sendRequest({
req: "login",
user: username,
pass: pass,
remember: remember
}, function(response) {
console.log("RESPONSE RECIEVED HOOORAH!");
});
这个函数又转到我后台的以下 switch 语句.html..
do_login(request.user, request.pass, request.remember, false, true, function(response){
if(response == true){
sendResponse("success");
}else{
sendResponse("badLogin");
}
})
以下是do_login
的内容。在执行 do login 我的弹出窗口期间.html在新选项卡中随机关闭并重新打开,代码在那里完成,我已登录。为什么会这样?
var xhr = new XMLHttpRequest();
xhr.open("GET",requrl,true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
xhr.onreadystatechange = function(do_login){
if(xhr.readyState == 4){
if(xhr.status == 200){
console.log(xhr.responseText);
try{
//Incase they were just logged in as another user.
createContextMenu();
//users info.
var resp = JSON.parse(xhr.responseText);
if(resp.default === void(0)){
logOut();
callback(null);
}
default = resp.default;
for(var i=0;i<resp.s.length;i++){
globalStaks[i] = resp.s[i];
}
st = global;
bud = resp.bud;
msg = resp.msg;
stakid = resp.default;
}catch(x){
// This situation is where you have incorrect password
console.log("something is wrong with logging in ")
clearLoginInfo();
console.log("Incorrect password");
}
if(resp.msg == "denied")
{
clearLoginInfo();
callback(false);
}
else
{
loggedIn = true;
user = username;
userid = resp.userid;
if(refresh){
refreshpage();
}
if(notificationdisplay){
notification.cancel();
}
if(remember)
{
clearLoginInfo();
storeLogin(username,pass);
}
localStorage.setItem("pass",pass);
md5 = pass;
callback(true);
}
}else {
callback(false);
}
}
}
xhr.send(null);
编辑
它显示为background.html
抛出的最后一个错误。 Attempting to use a disconnected port object
完整跟踪是...
Uncaught Error: Attempting to use a disconnected port object
chrome.Port.postMessagechrome/RendererExtensionBindings:147
chromeHidden.Port.dispatchOnConnect.connectEventchrome/RendererExtensionBindings:89
sendResponse.reply background.html:1266
xhr.onreadystatechange
弹出窗口
中的代码和数据是短暂的,因为一旦弹出窗口关闭,关联的代码就会随之关闭,因此从背景页面到弹出窗口的任何回调都将失败(没有什么可回调的)。
您需要找到打开新页面的内容(并非所有代码都包含在问题中 - createContentMenu 是做什么的?)。 桌面通知可能会导致您失去焦点,从而可能关闭弹出窗口。
还要确保在弹出窗口中捕获表单提交,然后通过XMLHttpRequest传递请求(或使用嵌入式框架来托管表单),因为弹出窗口中的表单提交并不像您想象的那样工作(您的页面不会在弹出窗口中更新)。
相关文章:
- ng高图表的响应行为,加载时隐藏编译的ng点击xAxis标签
- 如何从 jQuery ajax 响应中删除<脚本>标签
- 如何将不同的 CSS 类添加到 ajax 响应的不同标签中
- 谷歌地图JavaScript API在标签打开很长时间后未加载,并有403响应
- 如果对 JSONP 请求的服务器响应未正确包装在函数中,是否有任何方法可以覆盖“无效标签”错误
- 如何获取堆栈交换 API 使用的所有标签的 JSON 响应
- 如何使直方图中的标签对动态用户输入做出响应
- 响应式HTML5视频标签,多个查询
- Bootstrap没有响应,但我有元标签
- 假华夫饼响应标签屏幕问题
- 从ajax响应到img标签的Base64字符串
- 响应式数据表和引导标签的问题
- jQuery中包含的脚本标签在插入DOM时不会被AJAX响应计算
- 在rails 4中将remote选项设置为true后,Link_to标签没有响应javascript
- & lt; script>ajax响应中的标签未被IE解析<= 8
- 响应式标签中的谷歌地图
- 从包含<标签>的ajax响应中提取文本
- JQuery标签:如何显示'Loading. '消息# 39;等待AJAX HTTP请求响应
- & lt; script>标签在ajax响应中没有执行
- Node JS请求模块没有得到标签响应