2016-08-01 80 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