Firebase迁移 - 简单的firebase.set不再起作用 - 旧版与新版

时间:2016-05-18 21:44:40

标签: javascript google-chrome-extension firebase

我确定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 year old tutorial,为了在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.com https:// .firebaseio.com   https:// .firebaseio-demo.com https://www.gstatic.com/"。要么是   '不安全直插'关键字,哈希   (' - =')或nonce   (' nonce -...')是启用内联执行所必需的。

2 个答案:

答案 0 :(得分:1)

如果这是一个新项目,您可能会遇到一个更微妙的变化:默认情况下,数据库规则受到限制。

在Firebase.com上,数据库曾经是世界可读和可写的,但由于Firebase上有很多新功能,因此在new console中创建的项目默认需要使用身份验证:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

您可以添加anonymous auth来开始,或者只是将规则更新为旧的默认值。

此更改是由于Firebase的扩展范围 - 由于Firebase上有许多功能,因此有人创建项目并忘记锁定数据库(如果他们不使用它)会更容易),导致他们拥有一个世界可写数据库。

答案 1 :(得分:0)

正如Xan指出的那样,我inline scripts没有工作。 我通过以下方式解决了它:

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);
});