vainquit 2018-05-26 17:05 采纳率: 100%
浏览 994
已采纳

chrome的tab都载入完毕,status却是loading(附代码)

之前提问过一个相似的问题,不过描述比较随意,潜在的牵涉的东西太多不利于判断。我来痛定思痛自了个简化版的,尽可能复原实际情况。反复测试,但仍然没有什么眉目,按F12似乎没看到正在加载的项目,于是再次求助~

我的思路是,当一个tab被完全载入后,如果这个tab的网址是百度,那么就在一个backgourndscript上的一个叫myarray的数组里储存这个tab。另外再在popup界面设置一个按钮,按下去就输出myarray第一个元素的status。经测试,这第一个元素的status是loading,为何会这样?
图片说明

代码下载

以下是manifest.json

 {   "manifest_version": 2,
    "name": "demo",
    "version": "1.0.0",
    "description": "test",
     "permissions": ["storage","tabs","activeTab","https://*/*" ],

     "background":
    {
        "scripts": ["background.js"],
        "persistent": false
    },
 "content_scripts": 
    [
         {
            "matches": ["https://www.baidu.com/*"],
            "js": ["cc.js"],
            "run_at": "document_end"
        }
    ],
      "browser_action":
    {
        "default_popup": "popup.html"
    }
}

以下是background.js:

  var myarray=[];
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { 
if(request.msgcheck=="ccjs"){myarray.push(sender.tab)}
if(request.msgcheck=="ppjs"){console.log(myarray[0].status);}
});

以下是:cc.js:

 chrome.runtime.sendMessage({msgcheck:"ccjs"}, function(response) {});

以下是pp.js:

 document.getElementById("bt1").addEventListener("click", function(){
chrome.runtime.sendMessage({msgcheck:"ppjs"}, function(response) {});
},false);

以下是popup.html:

 <!DOCTYPE html>
<html>
<head>
<title>pp</title>
</head>
<body>
<input type="submit" value="开始" id="bt1"/>
<script src="pp.js"></script>
</body>
</html>
  • 写回答

2条回答 默认 最新

  • Go 旅城通票 2018-05-27 04:31
    关注

    document_end并不是所有资源加载完毕执行,应该是dom ready就执行了,而且存储的tab应该是当前的状态的一个克隆,并不是引用的,就是页面加载完毕后设置了状态,并不会更新之前压入的tab对象的status属性

    经测试放入window.onload中发送信息,并且延时0s执行就可以正确获取状态,不延时也是loading状态,不懂是不是bug,理论window.onload是所有资源加载完毕后才触发的,不需要延时。

     window.addEventListener('load', function () { 
    
        setTimeout(function () { 
            chrome.runtime.sendMessage({ msgcheck: "ccjs" }, function (response) { });
        }, 0)
    
    
    },false)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决