1

我已经开始使用 Firebase 和 Phonegap(目前仅适用于 Android,使用 Adob​​e 的在线构建工具)。我从他们的网站上获取了 Firebase 聊天示例,并将其几乎“按原样”粘贴到 index.html 页面,并与 phonegap config.xml 所需的捆绑在一起。在我的 android 手机上运行带有单个 index.html 的应用程序时 - 它运行 100%。当我将它移动到链接到 index.html 的某个内部页面(即 chat.html)时,我可以接收传入的聊天,但没有一个出去。即使相同的代码出现在 index.html 上时,它看起来也没有正确加载。

我的猜测是它与我所说的参考文献、它们的顺序和位置有关。

以下是我的代码片段,如果需要,我可以说明更多:

在 config.xml 上:

<feature name="http://api.phonegap.com/1.0/device" />
<feature name="http://api.phonegap.com/1.0/notification"/>
<access origin="*" />

在 index.html 上:

<script type="text/javascript" charset="utf-8" src="cordova-2.2.0.js"></script>
<script type="text/javascript" src="firebase.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="my.js"></script>
<script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/jquery.mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>

在 chat.html 我评论了所有的脚本标签(当然也尝试了所有这些标签都存在(未注释),结果相同)。

my.js(完整):

    $(document).on("mobileinit", function () {
    // Make your jQuery Mobile framework configuration changes here!

    $.support.cors = true;
    $.mobile.allowCrossDomainPages = true;
});

$(document).ready(function () {
    // Get a reference to the root of the chat data.
    var messagesRef = new Firebase('https://alon.firebaseio.com/');

    $('.send-action').click(function () {
        var name;
        if (navigator.platform == 'Win32') {
            name = 'me';
        } else {
            name = device.name + ' (' + device.uuid + ')'; //$('#nameInput').val();
        }
        var text = $('#messageInput').val();
        messagesRef.push({ name: name, text: text });
        $('#messageInput').val('');
    });

    // Add a callback that is triggered for each chat message.
    messagesRef.on('child_added', function (snapshot) {
        var message = snapshot.val();
        $('<div/>').text(message.text).prepend($('<em/>').text(message.name + ': ')).appendTo($('#messagesDiv'));
        $('#messagesDiv')[0].scrollTop = $('#messagesDiv')[0].scrollHeight;
        if (message.name != device.name + ' (' + device.uuid + ')') {
            navigator.notification.beep(1);
        }
    });
});

谢谢!

4

2 回答 2

1

这可能有点晚了,您可能已经意识到了 - 但是当您将所有代码移到另一个页面时,firebase 停止工作的原因是您将它移到的页面可能在根文件夹之外(即 - /chat/index.html)。

您在上面有两个脚本引用,其中源是“firebase.js”和“my.js”。这些是“相对 URL”,这意味着它们相对于包含这些文件的文档所在的位置。所以——如果你把这段代码原样放在 URL /chat/index.html 的页面上,你对这两个 js 文件的引用真的是在寻找“http://yourdomain.com/chat/firebase.js”和“http://yourdomain.com/chat/my.js”...但是如果您没有将这些文件复制到 /chat/ 目录,它们将出现 404 错误(或未找到)并且脚本不会工作。为这两个实例解决此问题的正确方法是改用“绝对 URL”。通过在每个脚本引用中添加“/”,您将使其成为绝对的,因此将“my.js”改为“/my.js”

于 2013-01-23T23:14:32.630 回答
1

你在监听 deviceready 事件吗?您需要在任何使用 PhoneGap 设备 API 的页面上。我看到您正在使用 JQM,这意味着您的页面通常会通过 AJAX 加载,这使我的建议无效,但是如果您覆盖了它(JQM 允许您这样做),那么这将是一个问题。

于 2012-12-24T20:34:40.167 回答