Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
Firebase Migrating - Simple firebase.set doesn't work anymore - Old vs. New
我相信firebase团队和这里的每个人今天都很忙,所以我尽量缩短时间。2天前,我有一个简单的代码,它有效:
var rootRef = new Firebase(http://*.firebaseio.com/)
function geturl() {
chrome.tabs.query({currentWindow: true, active: true}, function (tabs) {
var tabURL = tabs[0].url;
rootRef.set({
title: tabURL
});
});
}
现在我正在尝试迁移,所以我有了这个:
var config = {
apiKey: "*-*",
authDomain: "*-*-*.firebaseapp.com",
databaseURL: "https://*-*-*.firebaseio.com",
storageBucket: "*-*-*.appspot.com",
};
firebase.initializeApp(config);
var rootRef = firebase.database().ref();
function geturl() {
chrome.tabs.query({currentWindow: true, active: true}, function (tabs) {
var tabURL = tabs[0].url;
rootRef.set({
title: tabURL
});
});
}
这已经不起作用了。SDK也更新了,我把src改成了新的(注意从新文档中复制/粘贴,其中一个文件有404)。有人知道线索吗?
------编辑
我认为这与manifest.json中的content_security_policy有关,根据3年前的教程,为了在chrome扩展中使用firebase,需要将其设置为:
"content_security_policy": "script-src 'self' https://cdn.firebase.com
https://*.firebaseio.com; object-src 'self'"
现在,有人知道如何修改它以使用新的SDK吗?现在需要几个新的URL来建立连接,我认为这必须修改。弹出控制台给我这个错误:
拒绝执行内联脚本,因为它违反了以下内容内容安全策略指令:"script src'self'https://cdn.firebase.comhttps://.firebaseio.comhttps://.firebaseio-demo.comhttps://www.gstatic.com/"unsafe inline"关键字,哈希('-='),或nonce('none-…')是启用内联执行所必需的。
如果这是一个新项目,您可能会遇到一个更微妙的变化:默认情况下,数据库规则受到限制。
在Firebase.com上,数据库过去是完全可读写的,但由于Firebase上有太多新功能,在新控制台中创建的项目默认需要auth:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
您可以添加匿名身份验证,也可以将规则更新为旧的默认值。
这一变化是由于Firebase的范围扩大了——因为Firebase上有很多功能,所以人们更容易创建一个项目,忘记锁定数据库(如果他们不使用数据库的话),从而拥有一个世界可写的数据库。
正如Xan所指出的,我有内联脚本,但不起作用。我用以下方法解决了这个问题:
Popoup.html
<html>
<head>
<script src="https://www.gstatic.com/firebasejs/3.0.4/firebase.js"></script>
<script src="popup.js"></script>
</head>
<body>
<button id="clickme">click me</button>
</body>
</html>
Popup.js
var config = {
apiKey: "*-*",
authDomain: "*.firebaseapp.com",
databaseURL: "https://*.firebaseio.com",
storageBucket: "*.appspot.com",
};
firebase.initializeApp(config);
var rootRef = firebase.database().ref();
function geturl() {
chrome.tabs.query({currentWindow: true, active: true}, function (tabs) {
var tabURL = tabs[0].url;
rootRef.set({
title: tabURL
});
})
};
document.addEventListener("DOMContentLoaded", function() {
document.getElementById('clickme').addEventListener('click', geturl);
});
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- AngularJS Firebase注销用户不工作
- firebase登录与离子不工作
- Firebase推送通知-节点工作程序
- 带有Firebase的Cordova将无法正常工作
- Firebase limitToFirst 无法按预期工作
- Firebase存储getDownloadURL()不返回工作url
- Firebase push不能在value事件中工作
- 我试图上传一个图像到firebase,但代码似乎不工作
- 无法使child_added上的firebase工作
- 灰烬在Firebase主机不能正常工作
- 我的代码不工作.如何删除Firebase列表中的元素?
- 当直接链接时,AngularJS路由不工作——使用html5模式和Firebase重写
- 为什么我的Google身份验证不能在Firebase中工作?
- getDownloadURL无法正常工作-Firebase存储(Web)
- AngularFire -嵌套的Firebase请求不能工作