提问人:Felipe Obregón 提问时间:11/14/2023 更新时间:11/14/2023 访问量:25
无法从 Chrome 扩展程序访问 javascript 函数
Can't access javascript function from Chrome extension
问:
我正在尝试编写一个 Chrome 扩展程序,该扩展程序可以自动执行公司内部网站上的一些任务。网站使用 .aspx 文件。我正在尝试从我的扩展调用一个函数,但我收到此错误:__doPostBack()
test.js:7 未捕获的 ReferenceError:未定义__doPostBack
测试.js:
function clickLink() {
__doPostBack('ctl00$Main$AssetSearchPanel$DialogContainers$GridContainers$ctl02$BtnName','')
}
clickLink()
manifest.json文件
{
"manifest_version": 3,
"name": "Containers v2",
"description": "Base Level Extension",
"version": "1.0",
"content_scripts": [
{
"js": [
"test.js"
],
"matches": [
"https://url.com"
]
}
],
"content_security_policy": {
"extension_pages": "script-src 'self' 'wasm-unsafe-eval'; object-src 'self';"
}
}
我尝试使用内联脚本来规避调用此函数,但由于 Chrome 安全策略,我无法做到。
我可以从页面的Chrome DevTools控制台调用该函数。
答:
我正在写这个关于JavaScript知识的答案,而在chrome扩展API或任何它的名字上可能不是这种情况。
大多数情况下,从其他文件调用函数时,必须在代码中导入或引用该文件。
export function __doPostBack() {
// Your code here
};
这是您将放入 script.js 中的代码,用于导出函数,并使其能够被其他文件访问。
import { __doPostBack } from './script.js';
这是您将放入 test.js 中的代码,用于将函数导入到文件中,并能够使用它
var test = new __doPostBack()
此外,您还可以将脚本.js 导入为库。 在这种情况下:
myLibrary.__doPostBack()
注意:如果有人真正了解 Google chrome 扩展程序,请使用他们的答案。
希望这对你有帮助!
要解决此问题,您可以尝试以下步骤:
在文件中,通过确保此函数与文件中指定的 URL 匹配,确保正确调用该函数。目前,它似乎只与 匹配,因此请检查此 URL 是否与目标页面兼容。
test.js
__doPostBack
manifest.json
https://url.com
如果问题仍然存在,您可以更新文件中的文件部分,如下所示:
content_scripts
manifest.json
test.js
"content_scripts": [ { "js": [ "test.js" ], "matches": [ "https://*.url.com/*" ] } ]
这将与 下的所有页面匹配,包括子域。
url.com
由于 Chrome 的安全策略,您可以通过消息进行通信,而不是直接调用内部的函数。将以下代码添加到该文件中:
test.js
chrome.runtime.onMessage.addListener( function(request, sender, sendResponse) { if (request.action == "callDoPostBack") { __doPostBack(request.params); } } );
然后,在注入内容的文件中,您可以这样调用它:
chrome.runtime.sendMessage({action: "callDoPostBack", params: ['ctl00$Main$AssetSearchPanel$DialogContainers$GridContainers$ctl02$BtnName', '']});
评论
__doPostBack