2

该脚本包含一些变量并做一些 jQuery 的东西。我需要它在页面正确加载时运行。

但是,当有人单击最初加载/创建的页面上的链接,转到该链接页面(外部但 jQuery Mobile)并点击后退按钮(浏览器或移动页面的标题中)时,脚本会再次运行。

我不想要这种行为,因为没有必要重建页面——所以我的性能受到了影响。

这是我加载脚本的方式:

url = $.url();
rawterm = url.param('t').toLowerCase();
term = decodeURIComponent(rawterm).replace(/\+/g, " ");


var script=document.createElement('script');
script.type='text/javascript';
script.src= rawterm + ".js";
$("body").append(script);

被调用/创建的脚本有这样的东西:

tagLimit = 200;

var myName = rawterm;
var myKey = "somekey"
var updatePage = "mtl_u_master.html?t=" + myName;
var tagSearchPage = "mtl_s_master.html?t=" + myName;
var newestPage = "mtl_n_master.html?t=" + myName;


$('#searchPage').attr('href',tagSearchPage);
$('#updatePage').attr('href',updatePage);
$('#newestPage').attr('href',newestPage);

对任何和所有替代方法开放。谢谢!

4

1 回答 1

2

当你说 :

但是,当有人单击最初加载/创建的页面上的链接时,会转到该链接页面(外部但 jQuery Mobile),

你的意思是你正在使用 rel="external"。如果你这样做了,那么没有任何帮助,因为 rel="external" 正在导致整个页面刷新,而我不是在谈论 data-role="page" 刷新,这将是一个完整的网页刷新。当您返回原始页面时,所有内容都将再次执行,包括您的脚本,但这应该不是问题,因为您的脚本第一次执行的所有内容现在都消失了(包括页面 DOM)。

更多相关信息可以在这里找到:http: //jquerymobile.com/test/docs/pages/page-links.html

如果您不使用 rel="external" (记住 rel="external" 应该只用于从其他域加载页面),您的问题可以很容易地解决。您只需要使用 mobileinit 事件,如下所示:

$(document).on("mobileinit", function(){
    alert('Executed only once');
});

该事件只会执行一次,并且必须放在加载 jQuery mobile js 的 script 标签之前,如下所示:

<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" />     
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript" >
$(document).on("mobileinit", function(){
    alert('Executed only once');
});
</script>
<script type="text/javascript" src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>    

或像这样:

<script src="jquery.js"></script>
<script src="custom-scripting.js"></script>
<script src="jquery-mobile.js"></script>

更多相关信息可以在这里找到:http: //jquerymobile.com/test/docs/api/globalconfig.html

于 2013-01-05T23:07:16.010 回答