Javascript chrome扩展-将消息从内容脚本发送到后台页面并返回到内容脚本?
我不知道这是否是做我想做的事情的最有效的方式,如果不是,请告诉我 我正在构建一个chrome扩展,它应该循环遍历页面上的每个单词,然后将其与数组中12000个元素的列表进行比较。我设法让它在内容脚本页面上工作,但令我沮丧的是,由于所有正在发生的循环,加载我的内容脚本大约需要7秒钟。显然,这并不理想。所以我想把所有的Javascript chrome扩展-将消息从内容脚本发送到后台页面并返回到内容脚本?,javascript,jquery,google-chrome,google-chrome-extension,Javascript,Jquery,Google Chrome,Google Chrome Extension,我不知道这是否是做我想做的事情的最有效的方式,如果不是,请告诉我 我正在构建一个chrome扩展,它应该循环遍历页面上的每个单词,然后将其与数组中12000个元素的列表进行比较。我设法让它在内容脚本页面上工作,但令我沮丧的是,由于所有正在发生的循环,加载我的内容脚本大约需要7秒钟。显然,这并不理想。所以我想把所有的p标记发送到后台页面,然后它将p单词与数组进行比较,一旦找出匹配的单词,它就会向内容脚本发送一条消息,其中包含一个较小的数组,数组中只包含p标记和我的数组中的单词 现在我的问题是,这可
p
标记发送到后台页面,然后它将p
单词与数组进行比较,一旦找出匹配的单词,它就会向内容脚本发送一条消息,其中包含一个较小的数组,数组中只包含p
标记和我的数组中的单词
现在我的问题是,这可能吗?它会缩短加载时间吗?这有效吗
最后一个问题:我的清单使用的是
html
形式的背景页面,但如果我想同时使用背景脚本,谷歌不允许这样做,那么我可以将我的背景脚本放在背景页面html
文件中,它会加载该脚本吗?对于第一个问题,是的,可以这样做。它将在后台(和隐藏)页面中执行您的重处理。包含内容脚本的页面不会以这种方式冻结
您可以这样做:
在您的背景脚本中:
function heavyStuff(request, sender, sendResponse)
{
...
doSomeThing(request)
doOtherThing()
...
sendResponse(youreSmallerArray)
}
chrome.runtime.onMessage.addListener(heavyStuff)
在内容脚本中:
function manageResponse(smallerArray)
{
...
doWhatYouWant(smallerArray)
...
}
arrayOfP = $("p")
chrome.runtime.sendMessage(arrayOfP, manageResponse)
所以它会做你想做的,但是你确定你在做什么吗?也许你的算法需要改进
有关Chrome消息系统的更多信息,请阅读
特别是如果你必须发送大量的消息,请查看长寿命连接部分
对于第二个问题,您可以将清单中的background page属性替换为:
"background":
{
"scripts":
[
"background.js",
"otherScript.js",
....
"theLastScript.js"
]
}
Chrome将自动创建包含此脚本的背景页面(按相同顺序)
注:下次你在这个网站上发帖时,请一次只问一个问题;-) 欢迎访问SO的可能副本。在你的最后一段中:所以在一个问题中处理多个问题并不好。但是:您的背景html肯定可以包含background.js。你也可以完全跳过html,Chrome会帮你做到。如果没有更多的上下文,这很难说。您的建议会增加很多开销(序列化DOM,与后台页面交换消息),如果处理选项卡中的所有标记需要7秒钟,那么将其移动到扩展的后台页面并不能改善用户体验。您最好尝试提高应用程序的性能。使用devtools的探查器找出瓶颈,并修复它。没关系,这里不是每个人都能说一口流利的英语。只是这是最令人恼火的错误之一。请参阅。@Xan Haha^^从现在起我会小心处理:-)您可以发送jQuery对象消息吗?@Teepeemm您可以发送任何类型的消息。它可以是一个对象、一个字符串、一个数组、一个整数,或者任何你想要的东西