2016-08-01 45 views
0

我爲客戶端構建了一個站點,其中有一個腳本,用於在移動視圖中移動主內容下方的側欄div。此腳本加載頁腳:在外部腳本函數結束時重新運行內聯腳本

// Move Global nav to top for mobile 
$(window).on("resize", function() { 
var windowSize = $(window).innerWidth(); 
    if(windowSize > 767){ 

     $(".utility-nav").insertBefore($(".global-nav")); 
     $(".sidebar-secondary").insertAfter($(".subnav")); 

    } else { 

     $(".global-nav").insertBefore($(".utility-nav")); 
     $(".sidebar-secondary").insertAfter($(".content-main")); 

    } 
}).resize(); 

他們是加入第三方日曆要求他們插入代碼段,包括內嵌腳本。當這些被放置在移動移動的.sidebar-secondary div時,內容消失。我認爲,因爲我的腳本在啓動後正在運行,所以它們被取消了。

有沒有辦法讓我的腳本重新運行該div內的任何內聯腳本?

這裏是他們正在測試的頁面: http://www.umary.edu/sandbox-training/index.php

左側邊欄中的腳本是有故障的人。

謝謝!

回答

0

您可以擷取股利和eval文本中的所有腳本標籤中他們

$('#run').click(function(){ 
 
\t $('#someSideBar').find('script').each(function(){ 
 
    \t eval($(this).text()); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="someSideBar"> 
 
    <script type="text/javascript"> 
 
    \t alert('hello'); 
 
    </script> 
 
    <script type="text/javascript"> 
 
    \t alert('there'); 
 
    </script> 
 
</div> 
 
<input type="button" id="run" value="Run">

**你應該在繼續之前研究的這一安全隱患。

+0

我不在城裏,但會在我返回時嘗試。非常感謝! – MsMaryMak

0

內容消失的原因是因爲 s表示握住你的內容是卸載當他們從DOM分離,並加載後,他們再次連接到DOM。由於所涉及的似乎是由腳本生成的,因此第二次加載會生成空白文檔。看到這個加載/卸載行爲,請看這個simple DOM test-case。據我所知,無法在DOM中移動iframe,從而禁止這種行爲。

您明確地要求這樣做,但只要重新運行內聯<script>,可能不會產生您希望的結果,除非這些腳本是(以意外或有目的方式)以允許的方式寫入的。對這種東西要小心,。如果只有一個document.write(),則整個文檔將被覆蓋。這通常不是您想要交給第三方腳本的破壞力。

  • 您可以嘗試使用Flexbox和order屬性重新排列您的內容,因此內容將在CSS中移動,而不是在DOM中移動。
  • 您可以嘗試重新排列其他內容,以便您不需要在DOM中移動.sidebar-secondary。您可能需要將輔助內容塊拆分爲單獨的<div role="complimentary">(順便說一下,這就是<nav>的用途)。完成後,您可以在.sidebar-secondary的容器前移動#content-start
+0

我不在城裏,但當我回來時會嘗試這個。非常感謝! – MsMaryMak