我开始玩Firebase和Phonegap(目前仅适用于Android,使用Adobe的在线构建工具)。我从他们的网站上获取了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);
}
});
});
谢谢!
答案 0 :(得分:1)
您是否正在侦听deviceready事件?您需要在任何使用PhoneGap Device API的页面上。我看到你正在使用JQM,这意味着你的页面正常通过AJAX加载,使我的建议无效,但如果你覆盖它(JQM允许你这样做)那么这将是一个问题。
答案 1 :(得分:1)
这可能有点晚了,你可能已经意识到了 - 但是当你将所有代码移动到另一个页面时firebase停止工作的原因是你移动它的页面可能在根文件夹之外(ie- /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”,因为浏览器将此视为绝对URL,将“/”推断为你域名的根源。