簡體   English   中英

Backbone.js沒有在正確的時間執行document.write?

[英]Backbone.js not performing document.write at the correct time?

我有一個backbone.js CMS,它接受html,然后在瀏覽器中呈現它。 以下是呈現骨干頁面對象的模板文件(在.hamlc中)。

%h1.text= @page.get('title')
.text.page-content!= @page.get('content')

這工作正常,直到我有一個<script>標記。 我有一個小部件的腳本標簽(下面)

<script src='http://www.opentable.com/frontdoor/default.aspx?rid=52900&restref=52900&bgcolor=8AA86B&titlecolor=0F0F0F&subtitlecolor=0F0F0F&btnbgimage=http://www.opentable.com/frontdoor/img/ot_btn_black.png&otlink=FFFFFF&icon=light&mode=short&hover=1'></script>

這個小部件使用document.write (如果查看源代碼 ,可以看到)。 首先,當我加載頁面時,它沒有顯示任何內容(我已經在一個html文件中自己測試了這個小部件,它顯示了他們正常的上帝可怕)。 當我檢查元素時,看起來腳本標記已被刪除。

但是,當我測試以下內容時:

<script type="text/javascript">
    alert(0);
</script>

它運行。 盡管如此,檢查員仍然沒有。

最后,測試如下:

<script type="text/javascript">
    document.write('test');
</script>

它也運行。 但是,它完全破壞了頁面內容,只顯示了“測試”。

根據這篇關於將widget.write用於小部件的文章 ,它說它在頁面加載后無法運行。 我假設這里發生的是document.write在頁面加載后運行並銷毀所有內容,因為這是技術backbone.js使用(在加載頁面后附加/替換DOM中的元素)。

如何使我的Backbone.js CMS接受帶有document.write小部件的腳本標簽,而不顯示任何內容或破壞整個頁面?

我無法重現它,模板渲染應該:

$ coffee
coffee> hc = require './src/hamlc'
{ compile: [Function],
  template: [Function],
  __express: [Function] }
coffee> template = hc.compile ".text.page-content!= @content"
[Function]
coffee> template(content: 'Hello <script>Script</script>')
'<div class=\'page-content text\'>Hello <script>Script</script></div>'

並且腳本標記是持久的。 您是否安裝了最新版本?

如果我理解正確,您試圖在模板中包含窗口小部件的腳本標記,這意味着它在初始DOM准備好后插入。 由於你提到的原因,這不起作用; 當腳本執行時,它將替換DOM中的所有內容。

您需要在初始DOM完成之前加載腳本,即在< head >或< body >的開頭。 這反過來意味着您必須在服務器提供的初始HTML中包含腳本標記,而不是嘗試在客戶端動態生成腳本標記。

您在加載頁面后調用document.write,因此它將覆蓋整個頁面。 您可以嘗試將腳本標記放在iframe或monkey patch document.write中,以便在加載頁面后表現不同。 請參閱此問題的最佳答案:

動態添加JavaScript覆蓋html頁面視圖(不是代碼)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM