任何关于如何缩短这一点的建议都将不胜感激。此代码通过URL接受三个参数,并显示带有目标广告的页面。在如何减少用空格替换%20的三个部分方面,我特别需要帮助。另外,下面是带有示例参数的URL - http://timtechsoftware.com/ad.html?file_url=URL?file_name=FILE?keyword=KEY
这是ad.html的代码:
<!DOCTYPE html>
<html>
<head>
<title>Download File</title>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-41582851-1', 'timtechsoftware.com');
ga('send', 'pageview');
</script>
</head>
<body><div align="center">
<script type="text/javascript"><!--
google_ad_client = "ca-pub-1582371570610820";
/* Page Link Medium */
google_ad_slot = "3981698399";
google_ad_width = 468;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<script>
function getParam(paramName){ //Look for parameters
var prmstr = window.location.search.substr(1);
var prmarr = prmstr.split ("?");
var params = {};
for ( var i = 0; i < prmarr.length; i++) {
var tmparr = prmarr[i].split("=");
params[tmparr[0]] = tmparr[1];
}
return params[paramName]; //Return the requested parameter
}
var keyword = getParam('keyword');
var intIndexOfMatch = keyword.indexOf( "%20" );
while (intIndexOfMatch != -1){ // Loop over the string value replacing out each matching substring.
keyword = keyword.replace( "%20", " " ) // Relace out the current instance.
intIndexOfMatch = keyword.indexOf( "%20" );} // Get the index of any next matching substring.
var file_name = getParam('file_name');
var intIndexOfMatch = file_name.indexOf( "%20" );
while (intIndexOfMatch != -1){ // Loop over the string value replacing out each matching substring.
file_name = file_name.replace( "%20", " " ) // Relace out the current instance.
intIndexOfMatch = file_name.indexOf( "%20" );} // Get the index of any next matching substring.
var file_url = getParam('file_url');
var intIndexOfMatch = file_url.indexOf( "%20" );
while (intIndexOfMatch != -1){ // Loop over the string value replacing out each matching substring.
file_url = file_url.replace( "%20", " " ) // Relace out the current instance.
intIndexOfMatch = file_url.indexOf( "%20" );} // Get the index of any next matching substring.
document.write('<p style="text-align: center;"><a href="' + file_url + '">Download ' + file_name + '</a>' +
'<br/><br/>Tagged: ' + keyword + '</p>'); //Write the page
</script>
<script type="text/javascript"><!--
google_ad_client = "ca-pub-1582371570610820";
/* Rectangle Large */
google_ad_slot = "9662168393";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
</body>
</html>发布于 2013-12-24 02:19:49
您的getParam代码有一个错误,可能无法工作。
function getParam(paramName){ //Look for parameters
var prmstr = window.location.search.substr(1);
var prmarr = prmstr.split ("?"); //This has to be ampersand!!
var params = {};
for ( var i = 0; i < prmarr.length; i++) {
var tmparr = prmarr[i].split("=");
params[tmparr[0]] = tmparr[1];
}
return params[paramName]; //Return the requested parameter
}如果跳过几个中间步骤和一些不必要的步骤,此函数可能会更短:
这会给你更多的感觉
//Look for parameters
function getParam( s )
{
var a = window.location.search.substr(1).split("&"), i = a.length, pair;
while(i--)
{
pair = a[i].split("=");
if( pair[0] == s )
return pair[1];
}
}或者,更高
function getParam( s )
{
return location.search.substr(1).split(s+"=")[1].split("&")[0]
}然后,有人明显地复制粘贴了3倍的同一段代码,并做了一些小的改变。您应该有一个泛型函数,称为3 time。或者,认识到这段代码是unescape的一个糟糕的替代品,只需称之为它。替换错误的原因是,除了%20之外,还有更多的字符。
var keyword = unescape( getParam( 'keyword' ) ),
file_name = unescape( getParam( 'file_name' ) ),
file_url = unescape( getParam( 'file_url' ) );此外,还分配了两次google_ad_client = "ca-pub-1582371570610820";和google_ad_slot = "9662168393";。
请注意,document.write,我已经从可靠的消息来源,应该使用时,站在一个保护性召唤圈,以免更大的恶魔吞噬你。相反,您应该在HTML中使用链接标记,然后在js中找到链接,然后填充锚和标题。
最后,这不是很好的代码,我希望下载文件的服务器端代码质量更高,不会允许路径操作或路径遍历。
https://codereview.stackexchange.com/questions/38002
复制相似问题