列表格式显示

- 分类

广告招商中......
联系方式!

- 时间排序 更多...
    - 点击排序 更多...
      - 大小排序 更多...
        作者

         

        最近发布的软件 更多>>

        首页 >> >> >>Chrome扩展: chrome.runtime.onMessage.addListener中的代码从未被执行 发布者:blog >> 本人发布的更多软件

        广告招商中...... 联系方式!

        Chrome扩展: chrome.runtime.onMessage.addListener中的代码从未被执行 

        时间:2024-06-22 01:22:32      作者:blog     访问量:  
        ;开始下载地址

        我在尝试使用popup.js方法将一个变量从内容脚本传递到sendMessage时遇到了很多困难。

        这是内容脚本,我在其中向包含DOM节点的子节点数的后台脚本发送消息:

        代码语言:javascript

        复制

        let incomingChatsNumber = incomingChatsContainer.children().length;chrome.runtime.sendMessage({ incomingChatsNumber: incomingChatsNumber });

        然后,background.js侦听消息,并使用相同的变量向popup.js发送消息:

        代码语言:javascript

        复制

        chrome.runtime.onMessage.addListener(function (message, sender, sendResponse) {
          let incomingChatsNumber = message.incomingChatsNumber;
          chrome.runtime.sendMessage({ incomingChatsNumber: incomingChatsNumber });});

        在popup.js中,我有一个按钮,如果"incomingChatsNumber“大于0( dom容器有子元素),该按钮将触发一些代码:

        代码语言:javascript

        复制

          $("#js-toggleSorting").on("click", function () {
            chrome.runtime.onMessage.addListener(function (message) {
              let incomingChatsNumber = message.incomingChatsNumber;
              if (incomingChatsNumber <= 0) {
                $(".message").html("<p>No Chats To Sort, You Joker</p>");
              } else {
                $(".message").html("<p>Sorting Chats</p>");
                //This code never gets executed
                if ($("#js-toggleSorting").attr("data-click-state") == 1) {
                  $("#js-toggleSorting").attr("data-click-state", 0);
                  $("#js-toggleSorting").html("SORT INCOMING CHATS");
                  sortFunction(false);
                } else {
                  $("#js-toggleSorting").attr("data-click-state", 1);
                  $("#js-toggleSorting").html("STOP SORTING INCOMING CHATS");
                  sortFunction(true);
                }
                save_button_state();
              }
            });
          });

        对我来说,奇怪的是,popup.js得到了正确的值,我甚至可以console.log它,但是一旦我将更多的代码放在这个值上,如果有条件的话,即使条件允许,代码也永远不会被执行。

        更新:

        在做了ehab建议的修改之后,我意识到由于chrome.runtime.onMessage.addListener的异步特性,变量一直是“未定义的”:

        内容脚本:

        代码语言:javascript

        复制

          let incomingChatsNumber = incomingChatsContainer.children().length;
          chrome.runtime.sendMessage({ incomingChatsNumber: incomingChatsNumber });

        Background.js:

        代码语言:javascript

        复制

        chrome.runtime.onMessage.addListener(function (message) {
          let incomingChatsNumber = message.incomingChatsNumber;
          chrome.runtime.sendMessage({ incomingChatsNumber: incomingChatsNumber });});

        Popup.js (我需要在这里使用incomingChatsNumber变量的值):

        代码语言:javascript

        复制

          let latestIncomingChatsNumber;
        
          chrome.runtime.onMessage.addListener(function (message) {
            let incomingChatsNumber = message.incomingChatsNumber;
            latestIncomingChatsNumber = incomingChatsNumber;
            //This Works
            console.log(latestIncomingChatsNumber);
          });
          //This will give me an undefined value
          console.log(latestIncomingChatsNumber);

        我知道我的问题与以下事实有关: chrome.* API是异步的,所以chrome.runtime.和console.log(.)将同时执行,因此出现错误。那么,如何在单击事件中使用latestIncomingChatsNumber变量呢?我必须先将"latestIncomingChatsNumber“保存到chrome.runtime.onMessage.addListener内部的本地存储区吗?



        本页Html网址:/htmlsoft/619363.html

        本页aspx网址:/soft.aspx?id=619363&bianhao=202406220122325304_76621&kind1=&kind2=

        最后访问时间:

        上一篇:从后台脚本强制关闭chrome扩展弹出窗口

        下一篇:JavaScript 如何实现滚动到指定元素位置的功能?

        增加   


        相关评论        新窗口打开查看评论