编辑:
我刚刚发现我错误地捕获了错误,并且存在一些错误:
在运行该应用程序的环境中不支持此操作。 \“ location.protocol \”必须为http,https或chrome-extension,并且必须启用网络存储
这很有意义,因为我的页面的地址始于moz-extension
。
有没有解决方法?
原始问题:
我正在构建Firefox扩展。它更改了打开新选项卡后显示的默认页面。我想在该页面上使用Firebase Auth。
在显示的html内,我创建了一个按钮,该按钮将用于Google登录。单击后,将执行以下代码:
var provider = new firebase.auth.GoogleAuthProvider();
$("#authenticated_user_content").hide();
$("#google_login").on("click", function() {
console.log("GOogle login");
firebase
.auth()
.signInWithPopup(provider)
.then(function(result) {
// This gives you a Google Access Token. You can use it to access the Google API.
var token = result.credential.accessToken;
// The signed-in user info.
var user = result.user;
// ...
$("#not_logged_in_content").show();
$("#authenticated_user_content").show();
})
.catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// The email of the user's account used.
var email = error.email;
// The firebase.auth.AuthCredential type that was used.
var credential = error.credential;
// ...
});
});
会发生什么:单击#google_login
会在浏览器控制台中显示“ Google登录”消息,但没有带有Google登录表单的弹出窗口。
Firefox在控制台中未显示任何错误(在浏览器中单击F12
之后)。我厌倦了去about:debugging
并单击扩展名旁边的Debug
。单击#google_login
按钮后,会出现新窗口并显示此消息:
TypeError:无法访问死对象
我还有其他方法可以调查出什么问题吗?为什么不显示弹出窗口? Firefox是否会在扩展程序显示的网页中阻止此类功能?
答案 0 :(得分:0)
您需要创建Google provider对象的实例:
var provider = new firebase.auth.GoogleAuthProvider();
之前
firebase
.auth()
.signInWithPopup(provider)
可选:指定要从身份验证提供程序请求的其他OAuth 2.0范围。要添加范围,请调用addScope。例如:
provider.addScope('https://www.googleapis.com/auth/contacts.readonly');
请参阅身份验证提供者documentation。并且有more options