2012-12-24 18 views
1

我已經開始打了一下,用火力地堡和PhoneGap的(目前僅適用於Android,使用Adobe的在線生成工具)。我從他們的網站上獲取了Firebase聊天示例,並將它幾乎'按原樣'粘貼到index.html頁面,並與phonegap config.xml一起捆綁。 當我的android手機上運行帶有單個index.html的應用程序時 - 它運行100%。 當我將它移動到某個內部頁面(即chat.html)時,鏈接到index.html,我可以收到傳入的聊天記錄,但沒有人會出去。看起來像某些東西不能正確加載,即使相同的代碼出現在index.html上時也是如此。火力地堡與PhoneGap的 - 完美的作品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> 

上聊天。 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

我感謝大家誰讀這一個,但我已經決定把我的所有頁面的單index.html文件。 jQuery支持自動隱藏/顯示標籤,所以它相當容易。 而上述作品(如上所述,它已經在第一頁時已經工作)。 – Alon

回答

1

你在聽的deviceready事件?您需要在任何使用PhoneGap設備API的頁面上。我看你正在使用JQM這意味着您的網頁將正常通過AJAX的負荷,使我的建議無效,但如果你是推翻(JQM可以讓你做到這一點),那麼這將是一個問題。

+0

不,我不是。上面提到了我使用的唯一js。 – Alon

1

這可能是有點晚了,你可能已經意識到這already--但是當你移動所有的代碼到另一頁的火力點停止工作的原因是,可能你的頁面搬到它是根外文件夾(ie- /chat/index.html)。

你有以上,其中源「firebase.js」和「my.js」兩所腳本引用。這些是「相對URL」,這意味着它們與包含這些文件的文檔所在的位置相關。 So--如果你在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,推斷「/」作爲您的域的根。

+1

嗨特里克斯特,是的,這有點太晚了,因爲我把所有的東西都搬到了一個單獨的頁面上。不,所有的html文件都在根文件夾中(全部只是一個小的POC)。不管怎麼說,還是要謝謝你。 – Alon

相關問題