这个问题只有在我的应用程序通过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
版本。