我們正在建立一個帶有音頻播放器的Drupal站點,該站點應該在您瀏覽頁面時繼續播放(類似soundcloud)。我應該使用iframe而不是ajax嗎?
目前我們正在使用ajax加載點擊<a>
的站點,並將html注入頁面並使用history.js來操作位置。
有雖然主要缺點:
由於新加載的頁面可能有不同的CSS和它的JS,我們來比較當前的腳本,風格和鏈接元素Ajax響應文本(醜陋的正則表達式)只添加新的但不存在的元素。通過這樣做,加載另一個頁面不會刪除/刪除/撤消一次執行的腳本。這可能會成爲一個性能問題(而反對標記的正則表達式無論如何)。
使用iframe可能會解決這個問題和其他問題:
當你第一次點擊網站上的鏈接,頁面內容是由剛剛加載頁面的iframe代替。音頻播放器是在原來的dom中,我。即在iframe之外。點擊iframe中的鏈接也可以在歷史記錄API中捕獲和使用。
所以,雖然我從來沒有想過我會這樣想:我認爲使用iframe可能是更好的選擇,不是嗎?
PS:我的主要問題是我無法控制網站上的不同頁面有不同的腳本,樣式真的沒有問題。如果只有一個巨大的靜態js和css網站,我沒有問題。
更新
iframe解決方案工作正常,但在iOS中。 Iframes是越野車如地獄。不過,我認爲我們正在使用iframe解決方案。
你可以有一個「reset.css」文件清理所有以前加載的CSS - 但然後你需要確切知道每個頁面將以css的方式應用,這聽起來像你無法控制。如果通過'link'加載,也可以卸載css,但同樣取決於你如何加載css,看看這裏:http://stackoverflow.com/questions/1598899/unload-css-from-webpage –
CSS是沒有問題的。如果刪除樣式或鏈接元素,則CSS會被撤消。如果您追加新的樣式,樣式會更新。但腳本的行爲不同 – Alex
爲什麼你需要有不同的css/js文件?你不能連接/縮小它們並只服務一次嗎? 通過這種方式,當更改頁面時,您只需正確處理不同的狀態(綁定事件,解除綁定...)。 –