调用我自己的 JavaScript 函数
仅当我的应用程序通过 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
听起来您遇到了沙箱问题。 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
迈克的答案是最笼统的,但我在这里发布我的具体解决方案以供将来参考。
由于某种原因,
使用资源
无法正常工作。因此,我在emit
中动态添加标记,如下所示:
该外部 JavaScript 文件如下所示:
这样,我们就可以附加点击直接使用 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 anemit
like this:That external JavaScript file then looks like this:
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.