请问怎样用js方法接收window.loation.href传递过来的函数?

时间:2021-12-20 16:29:20
我写了两个页面:
a.html:

var xingming='CK';
var nianling='30';
var a=100;
var f=function(){alert(a)};
window.location.href="http://127.0.0.1/b.html?xingming="+xingming+"&nianling="+nianling+"&f="+f;


b.html:

function Request(strName){
var strHref = document.location.href;
var intPos = strHref.indexOf("?");
var strRight = strHref.substr(intPos + 1);
var arrTmp = strRight.split("&");
for(var i = 0; i < arrTmp.length; i++ ) {
var arrTemp = arrTmp[i].split("=");
if(arrTemp[0].toUpperCase() == strName.toUpperCase()) return arrTemp[1];
}
return 0;
}

var name=Request("xingming");
var f=Request("f");
alert(name)
f()


现在不清楚怎么处理这个f, 有谁用过这个吗?

12 个解决方案

#1


function Request(strName){
    var strHref = document.location.href;//当前url
    var intPos = strHref.indexOf("?");//得到第一个?的位置
    var strRight = strHref.substr(intPos + 1);//截取url中?的位置
    var arrTmp = strRight.split("&");//把?后的字符串按照&进行切割
    for(var i = 0; i < arrTmp.length; i++ ) {//遍历&切割后的数组
    var arrTemp = arrTmp[i].split("=");//把当前值按照=切割, 比如 a=1
    if(arrTemp[0].toUpperCase() == strName.toUpperCase()) return arrTemp[1];//如果当前的键等于strName,返回当前值
    }
    return 0;
}

#2


var strRight = strHref.substr(intPos + 1);//截取url中?的后的字符串

#3


<script>
function Request(strName){ 
var strHref = document.location.href; 
var intPos = strHref.indexOf("?"); 
var strRight = strHref.substr(intPos + 1);  
var arrTmp = strRight.split("&"); 
for(var i = 0; i < arrTmp.length; i++ ) {    
var arrTemp = arrTmp[i].split("=");     
if(arrTemp[0].toUpperCase() == strName.toUpperCase()) 
return arrTemp[1];     
}     return 0; 
}   
var a=1;
var name=Request("xingming"); 
var f=Request("f"); 
alert(name) ;
 var f= new Function('return '+f)();   
 f()
</script>
   
因为你那个传过来的是字符串,所以要重新new一下
还有必须定义a的值,不然无法弹出来

#4


var f= new Function('return '+f)(); 

这个好像不行啊?FF报错了:SyntaxError: missing ( before formal parameters

#5


你的 b.html 中有变量 a 吗?没有肯定是要出错的
不需通过页面传递,你这样测试一下就可以了
a = 123;
f = 'function(){alert(a)}';

ff = new Function('return '+f)();
ff();

#6


引用 4 楼 coglass 的回复:
var f= new Function('return '+f)(); 

这个好像不行啊?FF报错了:SyntaxError: missing ( before formal parameters


看完我的说明么?
要定义a,我的代码你估计也没注意看吧

#7


引用 4 楼 coglass 的回复:
var f= new Function('return '+f)(); 

这个好像不行啊?FF报错了:SyntaxError: missing ( before formal parameters


FF中是不能用f.toString()来取得函数的代码的

还是老实的用字符串吧
var f="function(){alert('"+a+"')}"; 

#8


引用 6 楼 chinmo 的回复:
看完我的说明么?
要定义a,我的代码你估计也没注意看吧


版主 你试过这个吗? 要是没定义变量a, 应该是常规错误,而不是语法错误啊,像这样:ReferenceError: a is not defined

#9


引用 8 楼 coglass 的回复:
Quote: 引用 6 楼 chinmo 的回复:

看完我的说明么?
要定义a,我的代码你估计也没注意看吧


版主 你试过这个吗? 要是没定义变量a, 应该是常规错误,而不是语法错误啊,像这样:ReferenceError: a is not defined

你会用firbug么?

写法是没错的
关键你没处理传递过来的值
获取跟IE解析本身就不通
你那样ID传递过来是这样的:b.html?xingming=CK&nianling=30&f=function(){alert(a)}
但是火狐不是:火狐实际解析成: b.html?xingming=CK&nianling=30&f=function%20(){alert(a)}
这样当然出错,所以跟后面的程序没有关系,而是你要处理传递过来的数据,跟能调用是否没关系,你值传递过来的都是非法的了,又没经过任何处理,怎么谈得上下面的工作?

#10


var f=Request("f").replace(/\%20/g, ""); 你加这个处理看看就知道了

#11


这种错误和题不算难
在于思考和观察,仅仅就只是一个简单的字符串处理而已

#12


恩 非常感谢版主!!!

#1


function Request(strName){
    var strHref = document.location.href;//当前url
    var intPos = strHref.indexOf("?");//得到第一个?的位置
    var strRight = strHref.substr(intPos + 1);//截取url中?的位置
    var arrTmp = strRight.split("&");//把?后的字符串按照&进行切割
    for(var i = 0; i < arrTmp.length; i++ ) {//遍历&切割后的数组
    var arrTemp = arrTmp[i].split("=");//把当前值按照=切割, 比如 a=1
    if(arrTemp[0].toUpperCase() == strName.toUpperCase()) return arrTemp[1];//如果当前的键等于strName,返回当前值
    }
    return 0;
}

#2


var strRight = strHref.substr(intPos + 1);//截取url中?的后的字符串

#3


<script>
function Request(strName){ 
var strHref = document.location.href; 
var intPos = strHref.indexOf("?"); 
var strRight = strHref.substr(intPos + 1);  
var arrTmp = strRight.split("&"); 
for(var i = 0; i < arrTmp.length; i++ ) {    
var arrTemp = arrTmp[i].split("=");     
if(arrTemp[0].toUpperCase() == strName.toUpperCase()) 
return arrTemp[1];     
}     return 0; 
}   
var a=1;
var name=Request("xingming"); 
var f=Request("f"); 
alert(name) ;
 var f= new Function('return '+f)();   
 f()
</script>
   
因为你那个传过来的是字符串,所以要重新new一下
还有必须定义a的值,不然无法弹出来

#4


var f= new Function('return '+f)(); 

这个好像不行啊?FF报错了:SyntaxError: missing ( before formal parameters

#5


你的 b.html 中有变量 a 吗?没有肯定是要出错的
不需通过页面传递,你这样测试一下就可以了
a = 123;
f = 'function(){alert(a)}';

ff = new Function('return '+f)();
ff();

#6


引用 4 楼 coglass 的回复:
var f= new Function('return '+f)(); 

这个好像不行啊?FF报错了:SyntaxError: missing ( before formal parameters


看完我的说明么?
要定义a,我的代码你估计也没注意看吧

#7


引用 4 楼 coglass 的回复:
var f= new Function('return '+f)(); 

这个好像不行啊?FF报错了:SyntaxError: missing ( before formal parameters


FF中是不能用f.toString()来取得函数的代码的

还是老实的用字符串吧
var f="function(){alert('"+a+"')}"; 

#8


引用 6 楼 chinmo 的回复:
看完我的说明么?
要定义a,我的代码你估计也没注意看吧


版主 你试过这个吗? 要是没定义变量a, 应该是常规错误,而不是语法错误啊,像这样:ReferenceError: a is not defined

#9


引用 8 楼 coglass 的回复:
Quote: 引用 6 楼 chinmo 的回复:

看完我的说明么?
要定义a,我的代码你估计也没注意看吧


版主 你试过这个吗? 要是没定义变量a, 应该是常规错误,而不是语法错误啊,像这样:ReferenceError: a is not defined

你会用firbug么?

写法是没错的
关键你没处理传递过来的值
获取跟IE解析本身就不通
你那样ID传递过来是这样的:b.html?xingming=CK&nianling=30&f=function(){alert(a)}
但是火狐不是:火狐实际解析成: b.html?xingming=CK&nianling=30&f=function%20(){alert(a)}
这样当然出错,所以跟后面的程序没有关系,而是你要处理传递过来的数据,跟能调用是否没关系,你值传递过来的都是非法的了,又没经过任何处理,怎么谈得上下面的工作?

#10


var f=Request("f").replace(/\%20/g, ""); 你加这个处理看看就知道了

#11


这种错误和题不算难
在于思考和观察,仅仅就只是一个简单的字符串处理而已

#12


恩 非常感谢版主!!!