库导出的方法不能从代码中调用,而是从 DevTools 中调用

Method exported by library cannot not be invoked from code, but from DevTools

任务是创建一个 Tizen 可穿戴应用程序,目标是 Tizen 2.3.2,使用 TAU 框架。

应用程序本身由两部分组成:

但是,从代码调用 tau.openPopup 会导致错误:

TypeError: 'undefined' is not a function (evaluating 'tau.openPopup('process-popup')')

从开发控制台 (Chrome DevTools) 调用相同的表达式确实按预期工作,这意味着库确实已正确加载并且其方法正在正确导出。

重新创建 GUI 应用程序(使用 Tizen Studio 提供的模板)没有解决问题。此时我运行没主意了;可能是因为我缺乏使用 JavaScript.

的经验

这种奇怪行为的原因可能是什么?

可能是 'import' 或 'require',因为您正尝试使用来自 app.js 的对象。

我很确定问题出在您没有使用正确的选择器。如果 'process-popup' 是您的弹出窗口的 ID,请使用“#process-popup”作为选择器,应该如下所示:

tau.openPopup('#process-popup')

我知道这是一个旧线程,但有人可能会再次遇到那个问题...

奇怪的行为导致了一个事实,即允许在所有资源完成加载之前执行脚本。

在这个特定问题中,TAU 库是在我的脚本之后加载的,这意味着方法 tau.openPopup 在调用时尚未被浏览器加载,因此未定义。 从控制台打开调用时,恰好浏览器加载完毕,定义方法

这个问题可以通过等待浏览器完成加载资源来解决。 最简单的 native 解决方案是在 window.onLoad 事件上注册回调(或事件侦听器);例如:

window.onload = function () { // Now we can do awesome stuff here! }

TAU openPopup 方法与页面的 Router 上下文一起运行,然后要使用它,您必须等待页面小部件完全加载。所以使用页面事件"pageshow":

// get element from your div with class="ui-page"
var page = document.getElementById("pageIndicatorPage");  
page.addEventListener("pageshow", function() {
    tau.openPopup('#process-popup');
});