FirebaseDatabase web iOS/OSX

FirebaseDatabase web iOS/OSX,ios,macos,firebase,firebase-realtime-database,Ios,Macos,Firebase,Firebase Realtime Database,我正在为一个学校项目开发一个网站,其中包含一个你需要按下的按钮。按下按钮时,该按钮从数据库中获取一个值,子“aantal”并添加1。完成后,它会将其重新上传回数据库。再往前一页,你就可以看到那个孩子的活号码了。问题是,这在iOS 9或更低版本以及OSX Yosemite或更低版本上不起作用。在android和windows上,它运行良好 可重用代码 这只是一个按钮。如果你按下按钮,它会在int上加1。这很奇怪,因为它在上面提到的操作系统上不工作 <script src="https://w

我正在为一个学校项目开发一个网站,其中包含一个你需要按下的按钮。按下按钮时,该按钮从数据库中获取一个值,子“aantal”并添加1。完成后,它会将其重新上传回数据库。再往前一页,你就可以看到那个孩子的活号码了。问题是,这在iOS 9或更低版本以及OSX Yosemite或更低版本上不起作用。在android和windows上,它运行良好

可重用代码

这只是一个按钮。如果你按下按钮,它会在int上加1。这很奇怪,因为它在上面提到的操作系统上不工作

<script src="https://www.gstatic.com/firebasejs/3.6.9/firebase.js"></script>
<script language="JavaScript">
        // Initialize Firebase
        var config = {
            apiKey: //API KEY,
            authDomain: //FIRBASE DOMAIN,
            databaseURL: //DATABASE URL,
            storageBucket: //STORAGE BUCKET,
            messagingSenderId: //MESGSENDID
        };
        firebase.initializeApp(config);
        var number;
        var database = firebase.database().ref().child('aantal');
        function buy() {
            database.on('value', snap => number = snap.val());
            var count = parseInt(number, 10) + 1;
            database.set(count);
        }
    </script>

//初始化Firebase
变量配置={
apiKey://API-KEY,
authDomain://FIRBASE域,
databaseURL://数据库URL,
storageBucket://存储桶,
messagingSenderId://MESGSENDID
};
firebase.initializeApp(配置);
var数;
var database=firebase.database().ref().child('aantal');
功能购买(){
database.on('value',snap=>number=snap.val());
var count=parseInt(数字,10)+1;
数据库设置(计数);
}
此代码将不起作用,请初始化自己的Firebase项目以进行测试。 出于安全原因,我删除了我的详细信息。

编辑 原来Safari(9.1/iOS 9.3及以下版本)不支持箭头功能

更改
database.on('value',snap=>number=snap.val())
数据库.on('value',函数(snap){number=snap.val()})修复了该问题

我的意思是,这种代码在任何地方都不应该起作用

function buy() {
    database.on('value', snap => number = snap.val());
    var count = parseInt(number, 10) + 1;
    database.set(count);
}
Firebase是异步的,您不必等待它从数据库中实际加载数字

这应该行得通

function buy() {
    database.on('value', snap => {
      number = snap.val();
      var count = parseInt(number, 10) + 1;
      database.set(count);
    });
}
我不知道这到底是你遇到的问题,还是你只是在你的例子中写的。此外,当递增值时,应该使用事务

function buy() {
    database.transaction(function(value) {
        if (value) {
            value++;
        }
        return value;
    });
}

到底是什么不起作用?我猜问题出在某些版本的Safari上,而不是在iOS上?什么都不管用。浏览器不会添加1,也不会显示数据库中的数字。有解决safari bug的方法吗?你没有在私人浏览模式下使用safari,对吗?不,我没有。我甚至检查了safari的设置,看看是否启用了JavaScript。您将获得当前用户,增加它并保存。使用完成块,您可以重定向。我将firebase与swift一起使用,因此无法提供示例代码。我尝试了此代码,但在safari中仍然不起作用。它在chrome tho中运行,就像我的原始代码一样。你是如何测试它的?在实际设备上?它在iOS 8.4模拟器上运行良好。是的,我在Safari的macbook OSX el capitan上测试了这段代码。给我一些,我去买我妹妹的macbook,应该也是一个相当低的版本。谢谢。虽然el capitan并不特别低。。难道它不能处理它吗?