Chrome 扩展:内容脚本 ->动态功能

发布于 2024-11-30 13:38:47 字数 407 浏览 1 评论 0原文

我想在内容脚本(Chrome 扩展)上调用动态函数。但常见的方法不起作用:

chrome.extension.onRequest.addListener(function cs_listener(request, sender, sendResponse) {
    [request.action]();
}

request.action 是废话。其中函数 blah() 是一个....现在它来了...一个函数!

抛出错误:

Error in event handler for 'undefined': TypeError: object is not a function

有人解决了这个问题吗?我真的不喜欢为我需要的每一个动作进行切换。

I would like to call a dynamic function on a Content Script (Chrome Extension). But the common way doesn't work:

chrome.extension.onRequest.addListener(function cs_listener(request, sender, sendResponse) {
    [request.action]();
}

request.action is blah. Where function blah() is a....and now it comes...a function!

Error thrown:

Error in event handler for 'undefined': TypeError: object is not a function

Someone got over this? I really don't like to make a switch for every action I need.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梅倚清风 2024-12-07 13:38:47

您必须使用

window[request.action]();

as

[request.action]();

创建一个包含 request.action 的数组,并尝试调用它,这会导致错误。 window[request.action]();window 获取名为 request.action 的属性并调用它。

您可能还想首先检查该属性是否已定义:

if(typeof window[request.action] == "function")
  window[request.action]();

You have to use

window[request.action]();

as

[request.action]();

creates an array containing request.action, and tries to call that, which results in the error. window[request.action](); gets the property named request.action from window and calls that.

You also might want to check if the property is defined first:

if(typeof window[request.action] == "function")
  window[request.action]();
提笔书几行 2024-12-07 13:38:47

另一种方法是仅从后台页面调用该函数,而不发送请求:

chrome.tabs.executeScript(null, {code: "dynamic_function_name()"});

Another way would be just calling that function from a background page, without sending a request:

chrome.tabs.executeScript(null, {code: "dynamic_function_name()"});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文