chrome 扩展 - 将消息从内容脚本发送到后台页面并返回到内容脚本?
chrome extension - send message from content script to background page and back to content script?
我不知道这是否是做我想做的事情的最有效方法,如果不是一定要告诉我。
我正在构建一个 chrome 扩展程序,它应该遍历页面上的每个单词,然后将其与数组中包含 12,000 个元素的列表进行比较。我设法让它在内容脚本页面上运行,但令我沮丧的是,由于所有循环都在发生,加载我的内容脚本大约需要 7 秒。显然,这并不理想。所以我有了将所有 p
标签发送到后台页面的想法,然后它将 p
单词与数组进行比较,一旦找到匹配项,它就会将消息发送回内容脚本,其中包含位于 p
标签和我的数组中的单词的较小数组。
现在我的问题是,这可能吗?它会减少加载时间吗?这有效率吗?
最后一个问题:我的清单使用 html
形式的背景页面,但如果我还想使用背景脚本 Google 不允许这样做,那么我可以放置我在后台页面 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的消息系统的更多信息,您可以阅读documentation。
特别是如果您必须发送大量消息,请查找长期连接部分。
对于第二个问题,您可以将清单中的背景页面属性替换为:
"background":
{
"scripts":
[
"background.js",
"otherScript.js",
....
"theLastScript.js"
]
}
Chrome 将自动创建包含此脚本的背景页面(以相同的顺序)。
PS : 下次您 post 访问此站点时,请一次只问一个问题 ;-)
我不知道这是否是做我想做的事情的最有效方法,如果不是一定要告诉我。
我正在构建一个 chrome 扩展程序,它应该遍历页面上的每个单词,然后将其与数组中包含 12,000 个元素的列表进行比较。我设法让它在内容脚本页面上运行,但令我沮丧的是,由于所有循环都在发生,加载我的内容脚本大约需要 7 秒。显然,这并不理想。所以我有了将所有 p
标签发送到后台页面的想法,然后它将 p
单词与数组进行比较,一旦找到匹配项,它就会将消息发送回内容脚本,其中包含位于 p
标签和我的数组中的单词的较小数组。
现在我的问题是,这可能吗?它会减少加载时间吗?这有效率吗?
最后一个问题:我的清单使用 html
形式的背景页面,但如果我还想使用背景脚本 Google 不允许这样做,那么我可以放置我在后台页面 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的消息系统的更多信息,您可以阅读documentation。
特别是如果您必须发送大量消息,请查找长期连接部分。
对于第二个问题,您可以将清单中的背景页面属性替换为:
"background":
{
"scripts":
[
"background.js",
"otherScript.js",
....
"theLastScript.js"
]
}
Chrome 将自动创建包含此脚本的背景页面(以相同的顺序)。
PS : 下次您 post 访问此站点时,请一次只问一个问题 ;-)