Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
hello.js不在AngularJS web应用程序中,不适用于iPhone和Blackberry Z10_Iphone_Angularjs_Blackberry_Hello.js - Fatal编程技术网

hello.js不在AngularJS web应用程序中,不适用于iPhone和Blackberry Z10

hello.js不在AngularJS web应用程序中,不适用于iPhone和Blackberry Z10,iphone,angularjs,blackberry,hello.js,Iphone,Angularjs,Blackberry,Hello.js,我有一个适用于大多数人的登录系统(在Chrome、Android设备、IE8、Firefox等上),但它似乎不适用于Z10或iPhone 5s的人。我没有访问这些设备的权限,所以很难进行测试,所以我想问一下我是否正确设置了所有设备 这是一个AngularJS应用程序,使用hello.js表示OAuth,使用bootstrap social和字体awesome表示登录按钮 要将hello插入Angular,请在app.jsI中包括: var app = angular .module('myapp

我有一个适用于大多数人的登录系统(在Chrome、Android设备、IE8、Firefox等上),但它似乎不适用于Z10或iPhone 5s的人。我没有访问这些设备的权限,所以很难进行测试,所以我想问一下我是否正确设置了所有设备

这是一个AngularJS应用程序,使用hello.js表示OAuth,使用bootstrap social和字体awesome表示登录按钮

要将hello插入Angular,请在
app.js
I中包括:

var app = angular
.module('myapp', [
'ui.bootstrap',
'ui.router',
'hello',
])
...
.run([..., 'hello', ..., function(..., hello, ...) {
   ...
   hello.init(...);
   ...
}]);
...

var helloApp = angular.module('hello', []);
helloApp.factory('hello', function() {
    return window.hello; // Assumes hello has been loaded
});
然后,在我的
loginCtrl
中,我将

angular.module('myapp').controller('loginCtrl', [..., 'hello', ...,
function(..., hello, $location, ...) {

...

$scope.doLogin = function(network) {
    console.log('Calling hello ' + network);
    hello.login(network);
};

...
}]);
在我看来,我有

        <button id="facebookLogin" class="btn btn-social btn-facebook" ng-click="doLogin('facebook')">
            <span class="fa fa-facebook pull-left"></span> <span>Sign in with Facebook</span>
        </button>
        <button id="googleLogin" class="btn btn-social btn-google-plus" ng-click="doLogin('google')">
            <span class="fa fa-google-plus pull-left"></span> <span>Sign in with Google</span>
        </button>

使用Facebook登录
使用谷歌登录
昨天我使用的是
onclick=“hello.login('facebook')”
,我怀疑在某些设备上出现了故障,因为我不应该使用
onclick
,而且
hello
不在范围内,所以我将其更改为
ngClick
,并在范围内调用函数。
onclick
对出错用户的具体影响是将用户重定向到默认的/catch all路由,而根本不访问服务器(我监听hello事件并调用服务器,因此这表明它根本没有调用hello)

但是,我仍然要求有问题的人重新尝试(显然是在刷新之后),现在他们说按钮根本没有作用

网站上的其他按钮可以正常工作。事实上,为了进入这个页面,他们使用了一个
,它使用
ui路由器
进入这个页面


我将继续搜索,但我只是想问我是否正确地将hello.js连接到AngularJS中,并且没有犯任何其他初学者错误。

我相信问题是iPhone和Z10阻止了hello.js的
弹出式
OAuth身份验证,但我不能直接将其切换到
页面

当我尝试时,Facebook会返回我的
redirect\uURL
,其中包含片段

#访问令牌=…..和过期时间=4264&状态={%22客户端id%22%3A%22164986300332415%22%2C%22网络%22%3A%22facebook%22%2C%22显示%22%3A%22页面%22%2C%22回调%3A%22_hellojs\u3OJN1YY8%22%2C%22状态%22%3A%22%22%2C%22oauth代理%22%3A%22https%2F%2F%2AUTH服务器.herokuapp.com%22%222C%22%22%22%22%22%22%{%22version%22%3A2%2C%22auth%22%3A%22https%3A%2F%2Fwww.facebook.com%2Fdialog%2Foauth%2F%22}

这很难看,但关键是它以散列标记开头。因此,虽然hello.js通常可以读取此内容,但在这种情况下它无法读取,因为Angular会立即损坏地址。我不确定这是否是因为我指定使用散列标记而不是散列标记,但确实如此

我无法将其发送到PHP脚本或任何东西,因为hashtag后面的片段永远不会发送到PHP脚本

因此,我的解决方案是将
重定向\u url
指向一个独立的页面,该页面上有hello.js,但没有角度。它将内容保存到
窗口。sessionStorage
并将用户重定向回登录页面,hello.js将用户传递到该页面


我对这种丑陋的方法还不是很有信心,所以我只在iPhone上安装了一个浏览器嗅探器(并对其他所有人使用
弹出窗口
),我可能会在将来删除这个检查(因为它很粗略)

@matt它使用本地存储,而不是会话存储

使用popup for all,并定义一个重定向uri页面,其中只有hello.js。我不知道为什么你会认为这听起来是错误的。所有的演示都是这样做的。它还让你有机会显示一个漂亮的加载屏幕


很抱歉这个丑陋的片段。它传递了很多用于oauth代理的状态参数……像facebook这样的大多数端点都不需要它,所以我可能会对它进行重构,使其不那么令人畏惧。

我将其改为使用“页面”而不是“弹出”,现在的问题是它不能正确返回。Hello.js使用哈希标记url片段,而我的应用程序使用哈希标记。你解决了这个问题吗,即使在普通浏览器上,我也无法返回。不幸的是,我仍然在使用我的hack(我在iPhone上使用
display:'page'
)我一直忙得不可开交,但仍打算从下面的评论中尝试@Drew的建议。你能用弹出窗口解决这个问题吗?我想我是……或者是……我已经有一年半没有做过这个项目了。如果我没记错的话,真正解决这个问题的是等到2015年春天,然后为hello.js做新的更新。:)嗯,我可能试图一次修复两个相关问题,即更改为
显示:页面
,并创建了一个hello.js-only重定向页面,而只有后者可以工作。不过,在创建页面之前,当iPhone用户单击登录按钮时,他们报告说什么也没有发生。无论如何,我更喜欢login弹出窗口,讨厌我插入的浏览器嗅探功能,所以这个周末我可能可以在iPhone上试用
display:popup
和我新的hello.js-only重定向页面。谢谢!我不得不承认我对本地存储不是很熟悉,当我说sessionStorage时,我的意思是我的代码在Angular中抓住了token并将其存储在sessionStorage中。我使用它登录到我的服务器。我应该直接从hello.js在localStorage中存储的内容中获取令牌吗?可能最好通过侦听更改来获取会话令牌,例如…hello.on('auth.login',function(res){/*使用res.authResponse*/})这就是我用来在sessionStorage中设置键的listen