我无法确定如何异步使用Chrome扩展程序代码。 docs说
chrome。* API中的大多数方法都是异步的:它们会立即返回,而不必等待操作完成。如果您需要知道该操作的结果,那么您将回调函数传递给该方法。该回调在稍后(可能更晚)执行,在方法返回后的某个时间执行。
var lastScrollPosition = 0;
window.onscroll = function() {
var newScrollPosition = window.scrollY;
if (newScrollPosition < lastScrollPosition){
//upward - code here
}else{
//downward - code here
}
lastScrollPosition = newScrollPosition;
}
上的documentation似乎暗示它是异步的,因为它需要一个在所有JavaScript执行完毕后调用的回调。
尽管已经意识到这一点,但我很难找到如何使用脚本执行的优势。
以下是executeScript
中的内容:
example.js
和var firstWords = "data:text/csv";
document.addEventListener('DOMContentLoaded', function() {
chrome.tabs.query({ currentWindow: true }, function(tabs) {
tabs.forEach(function(tab) {
chrome.tabs.executeScript(tab.id, { file: "getFirstWord.js" }, function(result) {
console.log("result of executeScript: ", result);
firstWord = result[0];
firstWords += firstWord;
console.log("firstWords: ", firstWords)
});
console.log("AFTER EXECUTESCRIPT firstWords: ", firstWords)
});
console.log("AFTER FOREACH firstWords: ", firstWords)
});
console.log("AFTER QUERY firstWords: ", firstWords)
});
console.log("AFTER EVERYTHING firstWords: ", firstWords)
:
getFirstWord.js
有点不出所料,输出不是我想要的:
console.log("hello from getFirstWord.js");
document.title.match(/\w*/)[0]
最终目标是累积所有所需数据的字符串(并转换为CSV)。
是否有某种AFTER EVERYTHING firstWords: data:text/csv
AFTER QUERY firstWords: data:text/csv
AFTER EXECUTESCRIPT firstWords: data:text/csv
AFTER EXECUTESCRIPT firstWords: data:text/csv
AFTER EXECUTESCRIPT firstWords: data:text/csv
AFTER FOREACH firstWords: data:text/csv
result of executeScript: ["Asynchronous"]
firstWords: data:text/csvAnsynchronous
result of executeScript: ["Washington"]
firstWords: data:text/csvAnsynchronousWashington
result of executeScript: ["Chicago"]
firstWords: data:text/csvAnsynchronousWashingtonChicago
类型的方法或其他一些使用回调的方法,以便在查询完成后我可以实际使用累积的结果?