Chrome扩展程序:如何使后台等待执行脚本?

丹尼斯·西维杜诺维奇(Denis Svidunovich)

我最近开始开发我的第一个Google Chrome扩展程序,但遇到了一个问题。在我的background.js脚本中,每秒我调用script.js,如下所示:

script.js:

/* Some code */
if (condition1) {
    setTimeout(func1, 500);
    result = 1;
} else
if (condition2) {
    setTimeout(func2, 4000);
    result = 2;
} else
/*Some code */

result

background.js:

function func() {
    chrome.tabs.executeScript(null, {file: 'script.js'},
        function (result) {
            console.log(result[0]);
        }
    );    

    /* Some code using results of scipt.js */
};

var interval = null;
function onClickHandler(info, tab) {
    if (info.menuItemId == "addon") {
        if (interval != null) {
            clearInterval(interval);
            interval = null;
        } else {
            interval = setInterval(func, 1000);
        }
    }
};

chrome.contextMenus.onClicked.addListener(onClickHandler);

chrome.runtime.onInstalled.addListener(function() {
    chrome.contextMenus.create({"title": "Addon", "id": "addon"});
}

因此,我需要每个max(1秒,在之前的executeScript之后)调用脚本。它应该以这种方式工作:

1. If previous script.js finished and 1 second after previous 
    interval call passed, call new script.js
2. If previos script.js finished and 1 second after previous 
    interval call haven't passed, wait for 1 second and call new script.js
3. If previous script.js haven't finished, wait until it finish 
    and if 1 second passed, call new script.js

在此先感谢您的帮助。

老鼠

chrome.tabs.executeScript回调期望同步结果。但是,您的逻辑是异步的。在这种情况下,您必须建立适当的进程间通信

background.js

chrome.tabs.executeScript(null, {file: 'script.js'});
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
     if (request.action === 'done') {
         console.log(request.result);
         // some code
         sendResponse({ action: 'next', arg: 2 });
     }

     // uncomment this if code is also asynchronous
     // return true;
});

// optional
// chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
//     chrome.tabs.sendMessage(tabs[0].id, { action: 'next', arg: 1 });
// });

script.js

function func1() {
    // some code
    var result = 1;
    done(result);
}
function func1(2) {
    // some code
    var result = 2
    done(result);
}

function runAction(which) {
    switch (which) {
        case 1: setTimeout(func1, 500); break;
        case 2: setTimeout(func2, 500); break;
    }
}

function done(result) {
    var msg = { action: 'done', result: result }};
    chrome.runtime.sendMessage(msg, function(response) {
        if (response.action === 'next') {
            runAction(response.arg);
        }
    });
}

// start
runAction(1);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从Chrome扩展程序后台脚本访问页面变量

来自分类Dev

Chrome扩展程序后台脚本不起作用

来自分类Dev

如何从Chrome扩展程序的后台js访问页面元素

来自分类Dev

单击popup.html(chrome扩展名)后执行脚本

来自分类Dev

在我的chrome扩展程序中仅执行一次后台脚本

来自分类Dev

Chrome扩展程序-查找所有打开的标签页,并在所有标签页上执行脚本

来自分类Dev

Google Chrome扩展程序中有多个后台脚本吗?

来自分类Dev

chrome扩展程序:页面加载完javascript后运行脚本

来自分类Dev

Chrome扩展程序后台脚本中的AngularJS

来自分类Dev

chrome.tabs.on针对Chrome扩展程序创建和执行脚本不起作用

来自分类Dev

Chrome扩展程序:后台脚本捕获网络和HTTP错误

来自分类Dev

Chrome扩展程序后台页面和内容脚本同步

来自分类Dev

如何在Chrome扩展程序中动态运行后台脚本?

来自分类Dev

Chrome扩展程序:创建一个新标签页,等待其完成加载,执行脚本

来自分类Dev

Chrome邮件扩展程序:从注入脚本到后台

来自分类Dev

在继续执行脚本之前,如何等待函数的结果?

来自分类Dev

在Chrome扩展程序后台脚本上接收CORS策略

来自分类Dev

Chrome扩展程序:仅在刷新后,后台脚本才会启动

来自分类Dev

开发Chrome扩展程序时,如何打开空白页以运行脚本?

来自分类Dev

Google Chrome标签页执行脚本

来自分类Dev

脚本无法在Chrome扩展程序中完全执行

来自分类Dev

Chrome扩展程序:后台脚本捕获网络和HTTP错误

来自分类Dev

Chrome扩展程序未在文档开始时运行脚本并且未打印内容

来自分类Dev

Chrome扩展程序-等待页面重新加载以继续执行脚本

来自分类Dev

应用程序终止时如何执行脚本

来自分类Dev

如何在Chrome扩展程序中动态运行后台脚本?

来自分类Dev

Chrome邮件扩展程序:从注入脚本到后台

来自分类Dev

如何在 ContextMenu 上运行脚本 单击 Chrome 扩展

来自分类Dev

chrome 扩展执行脚本等待 ajax 响应完成

Related 相关文章

  1. 1

    如何从Chrome扩展程序后台脚本访问页面变量

  2. 2

    Chrome扩展程序后台脚本不起作用

  3. 3

    如何从Chrome扩展程序的后台js访问页面元素

  4. 4

    单击popup.html(chrome扩展名)后执行脚本

  5. 5

    在我的chrome扩展程序中仅执行一次后台脚本

  6. 6

    Chrome扩展程序-查找所有打开的标签页,并在所有标签页上执行脚本

  7. 7

    Google Chrome扩展程序中有多个后台脚本吗?

  8. 8

    chrome扩展程序:页面加载完javascript后运行脚本

  9. 9

    Chrome扩展程序后台脚本中的AngularJS

  10. 10

    chrome.tabs.on针对Chrome扩展程序创建和执行脚本不起作用

  11. 11

    Chrome扩展程序:后台脚本捕获网络和HTTP错误

  12. 12

    Chrome扩展程序后台页面和内容脚本同步

  13. 13

    如何在Chrome扩展程序中动态运行后台脚本?

  14. 14

    Chrome扩展程序:创建一个新标签页,等待其完成加载,执行脚本

  15. 15

    Chrome邮件扩展程序:从注入脚本到后台

  16. 16

    在继续执行脚本之前,如何等待函数的结果?

  17. 17

    在Chrome扩展程序后台脚本上接收CORS策略

  18. 18

    Chrome扩展程序:仅在刷新后,后台脚本才会启动

  19. 19

    开发Chrome扩展程序时,如何打开空白页以运行脚本?

  20. 20

    Google Chrome标签页执行脚本

  21. 21

    脚本无法在Chrome扩展程序中完全执行

  22. 22

    Chrome扩展程序:后台脚本捕获网络和HTTP错误

  23. 23

    Chrome扩展程序未在文档开始时运行脚本并且未打印内容

  24. 24

    Chrome扩展程序-等待页面重新加载以继续执行脚本

  25. 25

    应用程序终止时如何执行脚本

  26. 26

    如何在Chrome扩展程序中动态运行后台脚本?

  27. 27

    Chrome邮件扩展程序:从注入脚本到后台

  28. 28

    如何在 ContextMenu 上运行脚本 单击 Chrome 扩展

  29. 29

    chrome 扩展执行脚本等待 ajax 响应完成

热门标签

归档