如标题所述,是否可以从另一个google扩展名访问google扩展名中定义的方法?我尝试访问的方法可以从Google控制台调用,但是,当我尝试使用以下代码从后台页面访问该方法时
chrome.tabs.executeScript(ns.tracsCopyFromTabId, {
code: "alert(methodName)"
}
它给了我以下错误:
Unchecked runtime.lastError while running tabs.executeScript: Cannot access a chrome-extension:// URL of different extension
我相信我尝试访问的方法是在其内容脚本中定义的吗?有没有人尝试过并成功做到这一点?
答案 0 :(得分:1)
错误+您关于不需要更改上下文的评论表示您可能不是实际上注入运行内容脚本的常规网页,而是扩展页(带有可见的URL chrome-extension://...
)。
按照定义,此类页面中的任何内容都不是 内容脚本。即使该代码也 与其他地方使用的内容脚本共享。
请注意,如果您正在使用(但未显示)allFrames: true
进行注入,则可能是偶然在扩展页框架中进行注入,从而导致该错误。
问题是您无法声明chrome-extension://
页的主机权限。因此,您不能将内容脚本插入这些页面。
无法单独通过扩展定义权限(要创建扩展,您可以分发“可以正常使用”),但是可以使用Chrome标志+ chrome.debugger
API在本地进行扩展。
您将需要启用chrome://flags/#silent-debugger-extension-api
,并需要使用Debugger Protocol来执行代码。
不幸的是,chrome://flags/#extensions-on-chrome-urls
标志也不允许注入该协议,因此您必须使用调试器。
如果您实际上是想在常规网页中的内容脚本中访问代码,则不能从自己的内容脚本中调用它,因为每个扩展都具有自己的隔离JS上下文。
您将再次需要chrome.debugger
。
有时候您要处理的是injected in the webpage itself from a content script的代码。
然后,您应该能够通过描述相同的内容脚本->页面代码来实现所描述的方法来访问它。请参阅上面的链接。
这不能解释您遇到的错误。