2015-01-15 37 views
3

我正在運行rails,而且我的身體標記末尾有這段代碼。UserReport和Turbolinks - 如何使JS turbolinks兼容?

:javascript 
    var _urq = _urq || []; 
    _urq.push(['initSite', 'mySiteId']); 
    (function() { 
    var ur = document.createElement('script'); ur.type = 'text/javascript'; ur.async = true; 
    ur.src = ('https:' == document.location.protocol ? 'https://cdn.userreport.com/userreport.js' : 'http://cdn.userreport.com/userreport.js'); 
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ur, s); 
    })(); 

無論我做什麼,點擊任何和所有turbolink啓用的鏈接都會中斷此代碼。該按鈕消失。

我已經試過封裝稱爲userReport函數中的代碼,然後做這樣的事情:

$(document).ready(userReport); 
$(document).on('page:load', userReport); 

這是行不通的。

建議是在主體部分的結尾非常歡迎的。

+0

這應該工作,你確定你的'userReport'函數工作嗎? – nathanvda

+1

刪除//需要app.js中的turbolinks並安裝jquery turblinks – Zippo9

回答

1

你的腳本,只需插入每次body重新加載時間script元素插入HTML的head部分。我想知道,你爲什麼需要這樣做?因爲每次點擊一個鏈接,您都會在doc的head部分獲得重複的script元素(感謝turbolink的魔力)。這可能是你的問題的原因。

如果你真的需要通過javascript來做到這一點,嘗試添加你的代碼在app/assets/javascript/application.js的末尾(不建議,我知道,但只是爲了測試這個想法)。 希望它有幫助。

UPDATE 根據UserReport's docs JavaScript代碼段應該屬於head部分。要做到這一點以同樣的方式,因爲這在他們的榜樣真實所示,你可以放置在腳本中「userreport」部分,並使用該部分內部應用程序的佈局模板:

<head> 
    … 
    <%= render 'layots/userreport' %> 
</head> 
+0

好點!正如你所說,重新插入將無法工作並插入重複的腳本。他應該找到一種方法來從userreport.com重新觸發腳本。我會說:從userreport請求支持,或者禁用turbolinks;) – nathanvda

+0

儘管我仍然沒有找到同時使UserReport和Turbolinks同時工作的方式,但我還是給了你努力的獎勵=/ 很遺憾我不得不啓用Turbolinks來啓用UserReport。 –

1

不幸的是,userreport.js腳本也不會啓用一個「重新加載」小部件,所以這是不可能的。

我提取從CDN的代碼,修改和使用它在我的資產,這樣我可以調用reset_user_report();每當我想要顯示的窗口小部件,(見本回購:https://github.com/nicolasmlv/userreport-turbolinks

使用您自己的風險因爲它不會再使用userreport cdn(功能更新/錯誤修復)