Ti.App.fireEvent不工作;错误未捕获TypeError:无法读取属性'应用程序'未定义的

时间:2014-10-31 10:21:29

标签: javascript android jquery titanium appcelerator

我有一个简单的Titanium应用程序,它打开一个webview,并加载一个URL。我希望链接在默认浏览器中打开,而不是应用程序。

我有一些jQuery代码,它将点击事件添加到页面中的所有链接。

<script>
jQuery('a').click(function() {
    console.log("Handler for .click() called for URL: " + this.href);
    Ti.App.fireEvent('ynOpenURL', {url:  this.href });
});

在app.js文件中我有:

var win = Ti.UI.createWindow();

var mywebview = Ti.UI.createWebView({
    url :  'http://xxxx.xxxxx.com/',
    enableZoomControls: false   
});

win.add(mywebview);
win.open();
Ti.App.addEventListener('ynOpenURL', function(e) {
 Ti.API.info('yyyyyy');
 Ti.API.info(e.url);

 if (Ti.Platform.canOpenURL(e.url)){
  Ti.Platform.openURL(e.url);
   } else {
    alert("Cannot open URL");
 }

当我在Android(4.4)上运行应用程序时,网页正确加载。

当我点击手机上的链接时,我在控制台中收到以下内容:

Handler for .click() called for URL: http://xxx.xxxxx.xxx/
Uncaught TypeError: Cannot read property 'App' of undefined (xxxx)

没有记录任何Titanium控制台事件,只记录网页中的javascript事件。

1 个答案:

答案 0 :(得分:2)

正如您所提到的,webview正在加载远程网址。因此,远程服务器 Ti.*Titanium.*

你能做的是:

  • 在应用内创建一个html文件,并通过ajax加载数据并使用fireEvent
  • 通过titanium http client加载数据并相应地使用Ti.Platform.openURL

编辑:来自Titanium WebView Docs

的报价
  

远程脚本

     

从远程Web服务器下载的脚本无法访问Titanium命名空间。

     

要与远程内容交互,请等到内容加载完毕,然后使用evalJS方法在Web视图中执行JavaScript表达式并检索表达式的值。