2015-04-09 10 views
1

Я использую функцию postMessage(), чтобы заполнить сообщение с мобильного приложения на поля веб-сайта. Я тестировал его в браузере, и все работает отлично. Однако, когда я пытался протестировать Android-телефон, ничего не заселено.AddEventListener работает в браузере, но не на Android

App сторона:

var password = localStorage.getItem("password"); 
var language = localStorage.getItem("lang"); 
var credentials = username+'-'+password; 
var msg = language+':'+username+'-'+password; 
var loginWindow = window.open('https://link', '_blank', 'location=yes'); 

function giveMeUsername(){ 
    loginWindow.postMessage(msg, 'https://link'); 
    console.log('open window'); 
} 

window.addEventListener('message', function(event) { 
    alert('listener alert'); 
var message = event.data; 
if(message == 'giveMeUsername'){ 
    console.log('call giveMeUsernam'); 
giveMeUsername(); 
} 
}, false); 

Эта линия alert('listener alert'); показывает предупреждение в браузере, но когда я проверить его на Android устройстве (APK-файл), ничего не отображается, и сообщение не отправляется на веб-сайт.

сторона Сайт:

addScriptDeclaration(" 
    console.log('message received1: '); 
window.onload = function(){ 
window.opener.postMessage('giveMeUsername', '*'); 
console.log('message received2: '); 
}; 
function GetSubstringIndex(str, substring, n) { 
    var times = 0, index = null; 
    while (times < n && index !== -1) { 
     index = str.indexOf(substring, index+1); 
     times++; 
    } 
    return index; 
} 
    window.addEventListener('message', function(event) { 
     console.log('message received3: '); 
     //if(event.origin !== 'http://appery.io') return; 
     var message = event.data; 
     console.log('message received5: '+message); 
     //var username = message.substr(0, message.indexOf('-')); 
     var lang = message.slice(0,2); 
     var username = message.substring(message.lastIndexOf(':')+1,message.lastIndexOf('-')); 
     var password = message.substr(message.indexOf('-') + 1);  
     jQuery('input#username').val(username); 
     jQuery('input#password').val(password); 
     document.getElementById('loginbtn').click(); 
     var x = document.getElementById('loginbtn').name; 
     console.log('message received6: '+ x); 
    }, false); 
"); 
$document->addScriptDeclaration(" 
     console.log('message received6: '); 
"); 
?> 

Я сбит с толку, как и я не знаю ни одного метода отладки .apk. Я только разрабатываю, тестирую и отлаживаю браузер, и все, что работает в браузере, обычно работает на Android.

+0

Не может помочь вам с вашей проблемой, но вы можете отлаживать .apk удаленно с помощью Chrome DevTools. Инструкции: https://developer.chrome.com/devtools/docs/remote-debugging. – balzafin

+0

@balzafin Я использовал weinre, никаких ошибок не видно. Я нашел проблему, потому что я использую inAppBrowser. Я нашел обходное решение здесь, но не уверен, как его реализовать в моем коде http://blogs.telerik.com/appbuilder/posts/13-12-23/cross-window-communication-with-cordova's-inappbrowser – Hawk

ответ

0

Две вещи:

На устройстве (трубки), функция Alert() не поддерживается. Вы должны использовать плагин диалоговых окон Cordova. org.apache.cordova.dialogs

И я бы попробовал document.addEventListener и посмотрел, стреляет ли это.

+0

Спасибо, 'Alert()' обычно выводит предупреждение на мой Android. Я пробовал 'document.addEventListener' напрасно. – Hawk