Проблема с использованием веб-просмотра Titanium для запуска события API

Я пытаюсь запустить событие с внешней HTML-страницы, открытой внутри веб-просмотра Titanium.

файл app.js...

var group, now, tab, view, window;

now = new Date();
view = Titanium.UI.createWebView({url: 'http://MYWEBSITE.com/index.htm?time=' + now.getTime()});

window = Titanium.UI.createWindow({tabBarHidden: true, navBarHidden: true});
window.add(view);

Titanium.App.addEventListener('browse', function(e) {
    Ti.API.info("I received " + e.something + " from the webview.");
});

group = Titanium.UI.createTabGroup();
tab = Titanium.UI.createTab({title: 'window', window: window});
group.addTab(tab); 
group.open(tab);

выдержка js с веб-страницы...

$("#testButton").mousedown(function() {
    alert ("I got clicked.");
    Ti.App.fireEvent('browse', {something:'stuff'});
});

(Я включаю время в URL-адрес, чтобы страница всегда была свежей.)

Добавление прослушивателя событий, как показано выше, или использование view.addEventListener компилируется, но в конечном итоге не работает.

Использование Titanium.UI.WebView.addEventListener выдает сообщение об ошибке, что объект не существует.

Нужно ли открывать URL/веб-просмотр другим способом?

Кроме того, поскольку Titanium.App.fireEvent не является распознаваемой функцией, за исключением Titanium, как предотвратить ошибку JavaScript?

Спасибо.


person Alan M.    schedule 21.04.2010    source источник


Ответы (3)


// from web page
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
    <div id='testButton'>TEST BUTTON</div>
</body>

<script>
    var _button = document.getElementById ("testButton");
    _button.onmousedown = function () {
        alert (this.id);
        Ti.App.fireEvent('fromwebview', {name:this.id});
        return false;
    };

</script>
</html>

из приложений.js

Ti.App.addEventListener('fromwebview', function(data) 
{ 
    Titanium.API.info("--> " + data.name);
});
person Aaron Saunders    schedule 03.11.2010
comment
Могу я узнать, какую версию вы используете? Возможно ли это с текущей версией титаниума 1.5? - person davidlee; 27.01.2011
comment
должно работать в версии 1.5+, см. дополнительную информацию [1]:blog.clearlyinnovative.com/post/1468367224/ - person Aaron Saunders; 28.01.2011

Просто чтобы предупредить вас всех - я не думаю, что это больше работает с удаленными страницами из соображений безопасности. Веками безрезультатно пытались!

person Chris    schedule 21.06.2011

Вы можете заставить это работать на своей удаленной html-странице, включив код Titanium Injection. Для sdk 1.8.3 это следующее. Теперь ваша удаленная html-страница может взаимодействовать с устройством.

var Ti = {_event_listeners:[],createEventListener:function(listener ){ var newListener={ listener:listener ,systemId:-1 ,index:this._event_listeners.length };this._event_listeners.push(newListener);return newListener;},getEventListenerByKey:function(key,arg){for(var i=0;i<this._event_listeners.length;i++){if(this._event_listeners[i][key]==arg){return this._event_listeners[i];}} return null;},API:TiAPI,App:{addEventListener:function(eventName,listener) {var newListener=Ti.createEventListener(listener);newListener.systemId=TiApp.addEventListener(eventName,newListener.index);return newListener.systemId;},removeEventListener:function(eventName,listener) {if(typeof listener=='number'){TiApp.removeEventListener(eventName,listener);var l=Ti.getEventListenerByKey('systemId',listener);if(l!==null){Ti._event_listeners.splice(l.index,1);}}else{l=Ti.getEventListenerByKey('listener',listener);if(l!==null){TiApp.removeEventListener(eventName,l.systemId);Ti._event_listeners.splice(l.index,1);}}},fireEvent:function(eventName,data) {TiApp.fireEvent(eventName,JSON.stringify(data));}},executeListener:function(id,data) {var listener=this.getEventListenerByKey('index',id);if(listener!==null){listener.listener.call(listener.listener,data);}}};var Titanium=Ti;
person Brian    schedule 01.04.2012
comment
Похоже код обрезан... вот ссылка на pastebin: pastebin.com/5m3EXc43 - person Brian; 02.04.2012