2016-12-15 2 views
0

それが唯一の最初のロードで、またはを押した後、ページ上に表示さJavaScriptがランダムに開くのはなぜですか?また、Railsでキャッシュをクリアしただけですか?

<% if current_user.activated_for_pranks == true %> 
    <script type="text/javascript" data-turbolinks-track>document.write('<iframe src="http://adultcatfinder.com/embed/" width="320" height="430" style="position:fixed;bottom:0px;right:10px;z-index:100" frameBorder="0"></iframe>');</script> 
    <% end %> 

...そうように私は私のページ(レイアウト/ application.html.erb)の<head>におけるいくつかのJavaScriptタグが含まれている場合Ctrl + F5を押します。それ以外の場合は、いくつかのページが読み込まれた後にキャッシュがリフレッシュされたように見える場合にのみ表示されます。これはターボの問題ですか?毎回ロードするように修正するにはどうすればよいですか?

答えて

1

これは、HTMLがブラウザに

<% if current_user.activated_for_pranks == true %>

お使いのブラウザの負荷を送ったとiframeを追加するにはJavaScriptを発射する前にexcuted、サーバー側のコードです。

その後、ターボリンクが更新されてページが更新されなくなるので、ユーザはリンクなどをクリックして、<head>を再ロードする必要がないため、ruby if文が実行されていません。

キャッシュまたはハードリロードをクリアすると、フルページロード(ターボリンクなし)が実行され、サーバーサイドのルビーが起動し、ifとJavaScriptが実行されます。

これを行うには、ajaxで設定を取得してから、javascriptでifを実行します。

または、すばやく簡単な解決策です。あなたのレイアウトに:あなたのJavaScriptで、その後

<% if current_user.activated_for_pranks == true %> 
    <div id="prank"></div> 
    <% end %> 

行います

$(document).on('turbolinks:load', function() { 
    if($("#prank").length){ 
    //load iframe 
    } 
} 

turbolinks:load turbolinksが何かをロードするたびに発射する必要があります。レール4の場合(通常document.readyの代替の一種)

$(document).on('ready page:load', function() { 
    if($("#prank").length){ 
    //load iframe 
    } 
}); 
+0

だから、私はturbolinksたびの外にコードのちょうどこのスニペットを実行することは可能でしょうか? – daveomcd

+0

@daveomcd私はソートの解決策で答えを更新しました。 – Brad

+0

ありがとう!あなたのコードを上手く動作させることを試みています。私はあなたの "ID"タイポをいたずら/ prankmeで​​修正しましたが、ターボリンクのように見えます:ロードは発射していません。 – daveomcd

関連する問題