调用我自己的 JavaScript 函数

发布于 2024-12-05 20:16:17 字数 598 浏览 0 评论 0原文

仅当我的应用程序通过 KBX 运行时,此问题才会显现出来。在小书签中运行它效果很好。我以前可以这样做,但现在不行了。

这就是我所拥有的。

标记上有一个 onclick 属性,用于调用 JavaScript 函数:

<p conclick="window.a163x134_log(this); return false;"></p>

这是我的函数的样子:

emit <|
    window.a163x134_log = function(obj) {
        // Do something
    };
|>;

我尝试使用常规函数名称(未附加到 window)并用 KOBJ 命名它。这些都不起作用。我收到的错误消息为“Uncaught TypeError: Object [object DOMWindow] has no method 'a163x134_log'”。

这是一个错误还是我需要更改代码中的某些内容?

This problem only manifests itself when my app runs through the KBX. Running it in a bookmarklet works fine. I used to be able to do this, but it doesn't work any more.

Here's what I have. There's an onclick attribute on a <p> tag that calls a JavaScript function:

<p conclick="window.a163x134_log(this); return false;"></p>

Here's what my function looks like:

emit <|
    window.a163x134_log = function(obj) {
        // Do something
    };
|>;

I've tried using a regular function name (not attached to window) and namespacing it with KOBJ. Neither of those works. The error message I get reads "Uncaught TypeError: Object [object DOMWindow] has no method 'a163x134_log'".

Is this a bug or do I need to change something in my code?

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

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

发布评论

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

评论(2

暖伴 2024-12-12 20:16:17

听起来您遇到了沙箱问题。 UBX 中运行的 JavaScript 在与页面分离的沙箱中运行。

我有一篇博客文章,可能已过时,也可能未过时 http://geek.michaelgrace.org/2011/03/kynetxs-new-sandboxed-browser-extensions/

你还应该尝试使用“使用资源”来提取 JavaScript 文件。我相信它会被拉入页面而不是沙箱。

另请参阅 通过 KBX 安装时 Kynetx 应用程序无法工作Chrome 上的扩展

Sounds like you are running into a sandbox issue. Javascript running in the UBX runs in the sandbox separate from the page.

I have a blog post that may or may not be out of date http://geek.michaelgrace.org/2011/03/kynetxs-new-sandboxed-browser-extensions/

You should also try using the 'use resource' to pull in a javascript file. I believe that gets pulled into the page and not the sandbox.

Also see Kynetx app not working when installed via KBX extension on Chrome

一梦浮鱼 2024-12-12 20:16:17

迈克的答案是最笼统的,但我在这里发布我的具体解决方案以供将来参考。

由于某种原因,使用资源无法正常工作。因此,我在 emit 中动态添加

emit <|
    var trigger_click_script = document.createElement("script");
    trigger_click_script.src = "<url to my JavaScript file>";
    document.getElementsByTagName("head")[0].appendChild(trigger_click_script);
|>;

该外部 JavaScript 文件如下所示:

$("p.ttt-time").click(function(e) {
    e.preventDefault();
    // Do something
});

这样,我们就可以附加点击直接使用 jQuery 处理事件处理程序,而不是依赖 onclick 属性来查看具有名称的函数。

注意:我正在开发的网站已经提供了 jQuery,因此我使用的是他们的版本,而不是 Kynetx 运行时附带的 $K 版本。

Mike's answer is the most general, but I'm posting my specific solution here for future reference.

The use resource didn't work for some reason. So instead, I dynamically add a <script> tag in an emit like this:

emit <|
    var trigger_click_script = document.createElement("script");
    trigger_click_script.src = "<url to my JavaScript file>";
    document.getElementsByTagName("head")[0].appendChild(trigger_click_script);
|>;

That external JavaScript file then looks like this:

$("p.ttt-time").click(function(e) {
    e.preventDefault();
    // Do something
});

This way, we're attaching the click event handler directly with jQuery, rather than relying on the onclick attribute being able to see a function with a name.

Note: The site I'm working on has jQuery already available, so I'm using their version, not the $K version that come with the Kynetx runtime.

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