一、mobile-jquery中body-onload函数的执行问题
问题描述:在使用mobile-jquery框架写网页的时候,从A页面跳转到B页面的时候,B页面中body的onload函数不执行,但是在刷新一下之后能正常执行了。
问题原因和解决方式:Jquery Mobile支持所有标准的html格式,为了让体验更加流畅,Jquery Mobile会把同一个域下的所有指向页面的链接都会自动转为ajax请求,并且用动画的转场效果实现切换。指向别的域的链接或者是含有 rel="external", data-ajax="false" 属性的链接以及含有target属性的链接不会通过ajax加载,页面会整体被刷新。
这个问题困扰了我一个下午,开始我以为是js函数的问题,但是我用一个只有alert语句的函数去测试还是没有用。网上说的改变js函数放置位置的方法我也试了,没用。后来我用其他页面进行测试的时候发现没有引入mobile-jquery框架的普通html页面可以很正常的实现跳转和onload函数。于是我猜想这个mobile-jquery的onload函数可能和普通的html页面不一样。于是我上网搜了半天的mobile-jquery页面跳转的问题,终于找到一篇博文解决了这个问题(http://www.cnblogs.com/shenbin/archive/2013/03/19/2969610.html) 。
我解决了问题简直是兴奋,必须写一篇博文来纪念一下。
这个问题如下
这是两个使用了mobile-jquery框架的页面,从页面A跳转到页面B的时候,页面B的onload函数不执行。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>页面A</title>
<link rel="shortcut icon" href="../jq/demos/favicon.ico">
<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans:300,400,700">
<link rel="stylesheet" href="../jq/demos/css/themes/default/jquery.mobile-1.4.5.min.css">
<link rel="stylesheet" href="../jq/demos/_assets/css/jqm-demos.css">
<link rel="stylesheet" href="mycss.css">
<script src="../jq/demos/js/jquery.js"></script>
<script src="../jq/demos/_assets/js/index.js"></script>
<script src="../jq/demos/js/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<div data-role="page" id="pageone">
<div data-role="content" >
<a href="test2.html" data-ajax="false">点击我可以跳转到页面B</a>
</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>页面B</title>
<link rel="shortcut icon" href="../jq/demos/favicon.ico">
<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans:300,400,700">
<link rel="stylesheet" href="../jq/demos/css/themes/default/jquery.mobile-1.4.5.min.css">
<link rel="stylesheet" href="../jq/demos/_assets/css/jqm-demos.css">
<link rel="stylesheet" href="mycss.css">
<script src="../jq/demos/js/jquery.js"></script>
<script src="../jq/demos/_assets/js/index.js"></script>
<script src="../jq/demos/js/jquery.mobile-1.4.5.min.js"></script>
</head>
<body onload="onLoad()">
<div data-role="page" id="pageone">
<div data-role="content" >
<a>我是页面B</a>
</div>
</div>
</body>
<script type="text/javascript"> function onLoad(){ alert("test"); } </script>
</html>
这是个普通的html页面,它可以正常的跳转到页面B,页面B的onload函数也能执行。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="utf-8">
<title>普通html页面</title>
</head>
<body >
<a href="test2.html">点我可以跳转到页面B</a>
</body>
</html>
把页面A中的<a>元素改成 <a href="test2.html" data-ajax="false">点击我可以跳转到页面B</a> 问题就解决了。