是否可以(并且一个好主意)通过哈希网址将动态数据传递给JavaScript包含文件?
如:
<head> <script src="scripts.js#x=123&y=456"></script> </head>
我正在寻找动态构建页面中内联js的替代方法:
<head>
<script src="scripts.js#x=123&y=456"></script>
<script>
$( document ).ready(function() {
pageInit(123, 456)
});
</script>
</head>
避免使用内联js是个好主意吗?如何在没有ajax的情况下传递动态数据,这会产生不必要的往返网络请求?
注意: hash bang url是一个特殊的,因为浏览器在检查缓存时会忽略url的哈希部分。至少对于html文件。
所以所有这些都将重用它在缓存中的index.html文件:
index.html
index.html#x=123
index.html#x=345345
index.html#x=2342&y=35435
同样的原则应该适用于javascript文件。我希望实现的是从页面到页面重用script.js的缓存版本。
转到index.php,包括:
<head> <script src="scripts.js#x=123&y=456"></script> </head>
然后去fun.php包含这个
<head> <script src="scripts.js#x=898756465&y=5678665468456"></script> </head>
然后去看看.php包含这个
<head> <script src="scripts.js#session=887987979&csrf_token=87965468796"></script> </head>
从页面视图到页面视图,通过哈希爆炸传递页面所需的任何信息,同时从缓存中重用scirpt.js。
那么,是否可以从scirpts.js中读取哈希爆炸信息?
答案 0 :(得分:0)
如果您创建的HTML文件是动态的,那么只需创建内联JavaScript。编写包含只会从浏览器创建一个额外的请求,您可以首先避免这种请求。
修改强>: 只需包含一个读取URL的JavaScript文件,您不需要传递任何变量(但当然,您也可以):
$(document).ready(function() {
// pseudo code
hashbang = location.href.substr(location.href.indexOf('#') + 1);
if (hashbang.x && hashbang.y) {
pageInit(hashbang.x, hashbang.y);
} else if (hashbang.csrf_token) {
// do something else
}
});