我正在为我的Cordova应用程序开发Facebook登录功能,我在那里使用InAppBrowser来执行登录。从那里我尝试使用executeScript方法从InAppBroswer获取数据并将其返回到我的主应用程序(在服务器上运行,而不是在手机上本地运行)。这适用于Android,但不适用于IOS(没有调用任何回调方法)。也许这里的任何人都可以帮助我?
以下JavaScript文件包含在服务器上的主应用程序中..
对于IOS:
cordova.js (3.6.4)
cordova_plugins.js
index.js
对于Android
cordova.js (3.7.0)
cordova_plugins.js
index.js
在Android上运行代码时,我得到以下结果:
当我在IOS上运行代码时,我得到了以下结果:
..但没有调用回调函数。所以" d"不断重复..
让事情变得更糟。代码也在IOS上工作了两次。但只有两次。没有我对它做任何改动。
[编辑]
它显示我的问题是由于InAppBrowser中的工作流程而发生的。 这是我目前的流程..
当我尝试使用此流程时(无法使用登录功能),会触发回调..
[/编辑]
我用来打开InAppBrowser并稍后从中收集数据的代码如下所示:
function facebookLoginApp() {
var fbloginwin = window.open("/p/ajax/facebookLoginRedirect","_blank",'');
fbloginwin.addEventListener('loadstart',function() {
clearInterval(loop);
var loop = setInterval(function() {
fbloginwin.executeScript( {code: "test();"},function(values) { alert("returnvalue " + values); });
fbloginwin.executeScript(
{
code: "localStorage.getItem('userid')"
},
function( values ) {
var userid = values[ 0 ];
alert("Loadstart userId: " + userid);
//Some code removed here for more readable sample..
}
);
fbloginwin.executeScript(
{
code: "localStorage.getItem('error')"
},
function( values ) {
var error = values[ 0 ];
// If a name was set, clear the interval and close the InAppBrowser.
if ( error ) {
clearInterval( loop );
fbloginwin.close();
alert("Login failed: \n" +error);
}
}
);
},5000);
});
fbloginwin.addEventListener('loadstop',function() {
clearInterval(loop);
var loop = setInterval(function() {
fbloginwin.executeScript(
{
code: "localStorage.getItem('userid')"
},
function( values ) {
var userid = values[ 0 ];
alert("Loadstop userid " + userid);
//Some code removed here for more readable sample..
}
);
fbloginwin.executeScript(
{
code: "localStorage.getItem('error')"
},
function( values ) {
var error = values[ 0 ];
// If a name was set, clear the interval and close the InAppBrowser.
if ( error ) {
clearInterval( loop );
fbloginwin.close();
alert("Login failed: \n" +error);
}
}
);
},5000);
});
}
InAppBrowser中的代码如下所示:
<html>
<script>
function test() {
alert("12341234");
return "12341234";
}
window.localStorage.setItem("userid","12341234");
window.localStorage.setItem("error","");
alert(window.localStorage.getItem("userid"));
</script>
<body>
Login successful. You will be redirected shortly.
</body>
</html>