0

这是我的情况。我有一个html + css + jquery很好的工作项目,我想用钛进行调整。这个项目有地理定位+ fb api调用。钛webview fireEvent addEventListener

我想让我的项目适应钛html5项目。我发现的是,我只能通过addEventListener和fireEvent函数调用钛api(当然只有当我使用webviews时)。

它是我的第一个钛工程,需要地理定位和Facebook API。

实际上,我开始修改以前的项目,在需要钛的零件中添加addEventlistener到app.js文件和fireEvents到前一个项目的javascript文件(包含在第一个项目中的html文件中) API调用(我不能在app.js之外调用钛api)。

问题是我需要返回一些值(对象)。

为了更好地理解我在做什么,下面是事件的顺序。

钛项目 (app.js)

var win = Ti.UI.createWindow(); 

var webview = Ti.UI.createWebView({ 
    url: 'index.html' 
}); 

Ti.App.addEventListener('geolocation',function(){  
    //some titanium api call 

    lat = x;lon=y; 
    Ti.App.fireEvent('geolocation_back',{latitude:lat,longitude:lon}); 
}); 

win.add(webview); 
win.open(); 

HTML + CSS + JS项目 (导入文件到index.html的,没有进口到app.js)

Ti.App.fireEvent('geolocation'); 

var my_lat ; 
var my_lon ; 

Ti.App.addEventListener('geolocation_back',function(d){ 
    my_lat = d.latitude; 
    my_lon = d.longitude; 
    //do other stuff with my_lat and my_lon 
}); 

希望你明白我在做什么。

我的问题是:

1)是我在做什么用钛和HTML代码一起工作的正确方法是什么?

2)有没有其他方法可以在html代码中调用titanium api并返回变量/对象?

编辑 这个代码仅适用于iOS和Android,但不是在Web浏览器。似乎内置服务器(Titanium工作室或Android Web浏览器模拟器)不会加载Ti。*或Titanium。*对象。无论如何,它使网页浏览器的作品?

我看到网页移动编译器在子文件夹中创建了所有钛API 有titanium.js和TI/*文件夹。任何人都可以解释为什么控制台说我Ti没有定义?

+0

这是正确的方法,另一种方法是使用'webview.evalJS()'[调用函数或以其他方式在web视图中](http://docs.appcelerator。COM /钛/最新/#!/引导/ Communication_Between_WebViews_and_Titanium)。尝试'yourWebView.evalJS('alert(“Hello”));' – 2013-03-12 22:39:45

+0

问题是,它只适用于物理设备,它不在Web浏览器上。 我想我将不得不从头开始为web手机浏览器做另一个版本。是对的吗? – 2013-03-12 22:54:54

+0

等待,你是如何构建webview?你使用钛来包装一个远程网站吗? – 2013-03-13 03:07:36

回答

0

正如我所说here

我找到了解决办法!

只需添加到您所有的HTML页面的简单脚本如下

变种TI = window.parent.Ti

有乐趣!