调用我自己的JavaScript函数



这个问题只有在我的应用程序通过KBX运行时才会出现。在bookmarklet中运行它就可以了。我以前能做到这一点,但现在不行了。

这是我有的。在<p>标签上有一个onclick属性,它调用JavaScript函数:

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

我的函数是这样的:

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

我试过使用一个常规的函数名称(不附加到window)和KOBJ命名空间。这两种方法都行不通。我得到的错误信息是"未捕获的类型错误:对象[对象DOMWindow]没有方法'a163x134_log'"。

这是一个bug还是我需要改变我的代码?

听起来你好像遇到了沙盒问题。在UBX中运行的Javascript在与页面分离的沙盒中运行。

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

你也应该尝试使用'use resource'来拉入一个javascript文件。我相信这是被拉进页面而不是沙盒的。

也看到Kynetx应用程序不工作时,通过KBX扩展安装在Chrome上

Mike的答案是最一般的,但我在这里发布我的具体解决方案以供将来参考。

use resource由于某种原因不起作用。因此,我在emit中动态添加<script>标签,如下所示:

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附加click事件处理程序,而不是依靠onclick属性能够看到带有名称的函数。

注意:我正在工作的网站已经有jQuery可用,所以我使用他们的版本,而不是随Kynetx运行时提供的$K版本。

最新更新