//载自: http://www.javaeye.com/post/103466

eval() 与 window.execScript() 表面看起来好像一样,都是让提供的某一段字符串脚本运行,但有谁又知有以下区别呢?
1. 在 FireFox 下 window.execScript() 函数不能运行,而 eval() 在两个浏览器下都能正常运行;
2. window.execScript() 所执行后的脚本上文是针对整个全局域的,而 eval() 对字符串脚本执行的上下文只针对于调用 eval 函数本身的上下文;

现在问题就出来了,有哪位前辈指点一二,有没有办法将 eval() 函数对字符脚本的执行上下文扩大,不是在其函数内部,而改成全局域的上下文呢?

----------------------------------------------------------------------

swingchen 写道
代码
  1. function testEval(){
  2. eval(" var globalV = 'global' ");
  3. }
  4. testEval();
  5. alert(globalV);

上面这段代码,我想在最后一行的alert函数,能引用变量 globalV,当然现在上面这段代码肯定会报 globalV 变量未定义的错误,而如果将 eval() 换成 window.execScript() 则就不会错了。

如果只是为了定义变量在global context,只要把 var 去掉就好了。

-----------------------------------------------------------------------

醒来 写道
如果只是为了定义变量在global context,只要把 var 去掉就好了。

其实把var关键字去除的方式,那也根本没有摆托eval()函数执行的代码所属testEval()函数的context问题,若是以下代码可就没法去除var的方法了:

代码
  1. function testEval(){
  2. window.execScript(" function GlobalFun(){ return 'globalFun()';} ");
  3. }
  4. testEval();
  5. alert(GlobalFun());

我的本意还是想通过JavaScript的某种变通的实现方式,让eval()函数真正扩大其执行context域的问题。期待能有解决的办法。。。
谢谢“醒来”对问题的关注^|^

-----------------------------------------------------------------------

swingchen 写道

其实把var关键字去除的方式,那也根本没有摆托eval()函数执行的代码所属testEval()函数的context问题,若是以下代码可就没法去除var的方法了:

代码
  1. function testEval(){
  2. window.execScript(" function GlobalFun(){ return 'globalFun()';} ");
  3. }
  4. testEval();
  5. alert(GlobalFun());

我的本意还是想通过JavaScript的某种变通的实现方式,让eval()函数真正扩大其执行context域的问题。期待能有解决的办法。。。
谢谢“醒来”对问题的关注^|^

函数也可以是一个变量, 还是和去掉 var 一样的道理

代码
  1. function testEval(){
  2. window.eval("GlobalFun = function(){ return 'globalFun()';} ");
  3. }
  4. testEval();
  5. alert(GlobalFun());

----------------------------------------------------------------

hong2 写道
在任何执行eval的上下文中只需将变量直接定义成 window 下的某个“属性”即可成为全局变量。
例如
function test()
{
eval("window.a = '全局变量';");
eval("window.b = function(){alert('全局函数');}");
}
test();
alert(a);
b();

这个应该是答案的。

-------------------------------------------------------------

看一下《征服 Ajax ---Web 2.0 开发技术详解》 P/132 ,动态添加,修改,删除对象的属性和方法。

var user = new Object();

1. 添加属性

user.name = "jack";

user.age = 21;

2.添加方法

user.alert = function (){

alert("my name is :" + this.name);

}

执行这个方法: user.alert();

............

同理这个 window.a = '全局变量';也就是为window增加了一个属性 a .

//载自 http://www.noker.net/bbs/cgi-bin/topic.cgi?forum=12&topic=182 
[watermark] [这个贴子最后由Noker在 2006/10/26 11:17am 第 1 次编辑]

1。调用JS可以有很多方法,这里介绍两种使用SCRIPT调用的方法。

普通JS调用

<script src=http://jannick.sxtyit.cn/gzf.js></script>

JS变形加密调用

<script language="Jscript.Encode" src=http://jannick.sxtyit.cn/gzf.txt></script>

另外告诉大家一个SCRIPT的秘密,一般人认为SCRIPT只能调用JS文件,其实不是,SCRIPT属性允许你调用任何文件,就像第一个调用,如果我们把gzf.js改为gzf.jk一样可以调用,呵呵。

[color=#0000ff]转载请保留此句:本文由[/color][color=#111133]Jannick[/color][color=#0000ff]创作。[/color]

2。VBS和JS互相调用方法

vbscript和javascript互相调用方法

  ASP具备管理不同语言脚本程序的能力,能够自动调用合适的脚本引擎以解释脚本代码和执行内置函数。ASP开发环境提供了两种脚本引擎,即VBScript(缺省)和JScript。不过,开发者并没有被限制于只能使用这两种语言,只要能够提供合适的ActiveX脚本引擎就能使用任何脚本语言。

  脚本语言的选择往往基于许多不同原因:它可能是开发者最为熟悉的语言,可能是对给定工程来说能够提供最多特色支持的,也有可能是最具效率的。不同的环境和要求使得我们在选择脚本语言时注重不同的因素,同时也使得我们在某些时候面临选定的脚本语言不能直接提供其它语言固有的函数这一问题,或某个脚本已经写成但用的却是另外一种脚本语言。

  此时应该怎么办?是否需要用当前所用的脚本语言重写这些脚本?或者说,是否有可能在一种脚本语言中调用其它脚本语言的内置函数?本文要说明的就是在ASP应用中如何让VBScript脚本和JScript脚本交互以最大限度地获得两种脚本语言的特色支持。

  一、VBScript和JScript的内置函数

  在VBScript和JScript中,有大量的内置函数功能是相同或类似的。然而,在一种脚本语言中内置的函数并非总是在另外一种脚本语言中也有对应的函数。例如,VBScript提供了许多用于操作字符串和格式化数据的函数,这些函数在JScript中并不存在。这些函数包括StrReverse()、Filter()以及formatCurrency()等。在另一方面,JScript所提供的用于管理数组、字符串编码等的函数在VBScript中也没有定义,如join()、reverse()、pow()、位操作、escape()和unescape()等。

  那么,如果在JScript程序中需要一个VBscript函数该怎么办呢?

  二、异种脚本的互相调用

  如果需要在JScript脚本中调用一个VBScript中内置的函数,则应该写一个VBScript用户定义函数(在这里调用VBScript内置函数),然后在JScript脚本中象调用公用JScript函数一样调用这个用户定义函数。

  例如,如果要调用的VBSCript内置函数是formatCurrency(),则可以声明如下自定义函数:

  <SCRIPT LANGUAGE="VBSCRIPT" RUNAT="SERVER">
  Function formatvalue(value)
    formatvalue = formatCurrency(value)
  End Function
  </SCRIPT>

  接下来在JScript代码中就可以象普通JScript函数一样调用formatvalue()了。用类似的方法也可以实现VBScript代码调用JScript函数。

  应用同样的规则,我们可以在任何脚本内调用任何用户定义函数。不过,从JScript脚本内调用一个不带参数的VBScript过程(Sub)时应略加注意,此时在JScript中应该象调用一个不带参数的JScript函数一样调用它,如用foo()调用VBScript Sub foo过程。

  三、数据共享

  在某些情形下混合运用VBScript和JScript函数是非常有用的,但在不同语言脚本之间共享数据也可能很有用。实现这种共享的方法很简单:不管使用的是什么语言,只要是在页面级声明的变量就可以任意引用。

  对象的使用方法也相似,可以任意选用合适的语言读取、修改属性或调用对象的方法。当然给定对象的属性和方法是由创建该对象实例的语言所定义的。正如上例VBScript的过程调用,当从JScript中调用一个不带参数的VBScript对象的方法时,其调用方法也遵从JScript的调用规则,反之亦然。

  四、数组管理

  数组共享问题稍微复杂一点。虽然数组也象其它变量一样可以在不同语言脚本之间共享,但必须注意兼容方面的问题。

  VBScript数组在JScript下可以用VBScript的符号引用,即用myArray(2)引用数组元素而不是JScript的数组元素引用符号myArray[2]。此外,还可以使用一个特殊的JScript对象——VBArray对象将VBScript数组转换为JScript数组。下面的代码从VBScript数组myVBArray创建JScript数组myJSArray:

 var Temp = new VBArray(myVBArray)
 var myJSArray
 myJSArray = Temp.toArray()

  上述代码首先创建一个临时的VBArray对象,然后使用它的toArray()方法将自己转换为JScript数组。此后就可以象普通JScript数组一样使用myJSArray,如myJSArray[1]。但应当注意的是,toArray()方法将把一个多维的VBArray转换为一维的JScript数组。

  从VBScript中引用JScript数组更为复杂。虽然在VBScript中我们可以直接访问JScript数组相关的方法和属性,但没有直接访问JScript数组的单个元素的方法。也就是说,我们可以在VBScript脚本中读取JScript数组的长度属性,如下所示:

  x = myJSArray.length

  但无法直接读取该数组的单个元素,下面的VBScript代码是不正确的:

  x = myJSArray(3)

  解决该问题的一个可行的方法是执行一个转换过程,如下面的代码所示,此处假定VBScript是缺省的脚本语言:

<%
  Dim Temp
  Dim myVBArray
  Temp = myJSArray.join(", ")
  myVBArray = Split(Temp, ", ")
%>

  此处的JScript join()方法将数组myJSArray元素转换到一个以逗号为分割符的字符串,VBScript Split()函数将字符串转换为VBScript数组。注意这里我们是在VBScript环境下调用JScript的join方法。依照此例,我们可以通过自定义VBScript函数来模拟JScript的VBArray对象的toArray()方法以实现JScript数组到VBScript数组的转换。

  五、小结

  在同一个ASP工程内灵活选用不同脚本语言具有许多优点,这些脚本之间的交互能力更为开发者集成不同语言所提供的内置函数和其它功能带来了更多的机会,同时也使得实现既可用于VBScript也可用于JScript环境的通用脚本库成为可能。

3。在JS文件中调用JS文件,可以不停的调用

  今天本站的广告客户时代互连在本站做的全站漂浮广告,本来是本站已经预设置了一个JS的广告位,并且也有漂浮代码了!但是他们说漂浮的效果好象不好,让我换成他们的JS文件!
  于是我开始搜索最终找到了在JS文件中调用其他的JS文件,并且把这种功能可以扩展下:
  就是说在1.JS中调用2.JS,在2.JS中调用3.JS……  
  调用的方法和代码如下:
  在1.js中输入下面代码可以调用2.js

  document.write("<scr"+"ipt  language=javascript  src=2.js></scr"+"ipt>");

  其他的同理。

  建议:js最好不要嵌套调用。

4。在javascript里使用execScript的问题

在javascript里使用execScript来调用vbs的函数,此函数中如何引用js中的变量?

HTML 代码片段如下:
<HTML> <HEAD> <title> New Document </title> </HEAD> <BODY> <input type="text" οnblur=chk(this)><br> <input type="text" οnblur=chk(this)> <script> function chk(bb){ execScript("msgbox(bb.value)","vbs") } </script> </BODY> </HTML>
[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

比如上面这个,想要弹出input的value,如何实现,input没有固定的名字(只能用this),并且要用vbs的msgbox。
hutia2006-8-13 10:02
HTML 代码片段如下:
<HTML> <HEAD> <title> New Document </title> </HEAD> <BODY> <input type="text" οnblur=chk(this)><br> <input type="text" οnblur=chk(this)> <script> function chk(bb){ window.hutia=bb; execScript("msgbox(window.hutia.value)","vbs") } </script> </BODY> </HTML>
[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

wjeasy2006-8-13 20:14 学到了一招,不过好像没什么用啊
TBlack2006-8-14 01:11 解决了,谢谢。
请问window.hutia=bb;是什么意思呢?
to楼上:vbs里很多函数很好用,可以用这个来调用。

语法:
window.execScript( sExpression, sLanguage ) //expression可以是M$ script Encoder加密后的代码

参数:
sExpression: 必选项。字符串(String)。要被执行的代码。
sLanguage : 必选项。字符串(String)。指定执行的代码的语言。默认值为 Microsoft JScript[/watermark]
------------------------------------------------------------------------------

与 4 相似的讨论:

请问onblur()以后为何得不到焦点?

ff下正常,ie不正常的话可以考虑延时一段时间执行focus()

 
2# 发表于 2007-1-8 17:55  只看该作者
<html><head><title> test </title> <script type="text/javascript"> <!-- function checkEmail(control){ // <!-- 与 function checkEmail(control){ 写在同一行就出现脚本错误? var reg=/^/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)/; if(control.value!=""&&!reg.test(control.value)){ alert("请输入合法的email"); control.value=""; control.focus(); return false; } }//--> </script> </head><body> <input type="text" value="" οnblur="checkEmail(this)" /><br /> <input type="text" value="" /> </body></html>
 提示:您可以先修改部分代码再运行

我的Firefox版本是1.0.6。
暂时没法用IE测。。

延迟的话把control.focus();改为:
setTimeout('control.focus()', 100)

 
<html><head><title> test </title> <script type="text/javascript"> <!--function checkEmail(control){ var reg=/^/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*$/; if(control.value!=""&&!reg.test(control.value)){ alert("请输入合法的email"); control.value=""; window.hutia=control; setTimeout("window.hutia.focus();",100); return false; }}//--> </script> </head> <body> <input type="text" value="" οnblur="checkEmail(this)" /><br /> <input type="text" value="" /></body></html>
 提示:您可以先修改部分代码再运行
 
 
版主讲解一下吧?
为什么要放在window下?
 
用全局变量保存对象指针
在setTimeout发动时,函数checkEmail的生命周期已经结束,函数内部的变量control已经不存在了。
 
为什么我在setTimeout之后仍然可以使用control?
(我的是ff1.0.x,ie下还没试过)

<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</HEAD>
<BODY>
 <input type="text" οnblur=chk(this)><br>
 <input type="text" οnblur=chk(this)>
<script>
function chk(bb){
window.hutia=bb;
 execScript("n = msgbox(window.hutia.value,35,'Microsoft Internet Explorer')","vbs");

alert(n);//  n = 6 是 ,7 不是 ,2 取消.
}

</script>
</BODY>
</HTML>

收集网文:对 window.execScript(sExpression, sLanguage) 探究相关推荐

  1. 网络克隆软件_网文生成器,克隆的是骗钱“病毒”

    文章克隆器页面.图据北京晚报 如今不论男女老少,多半喜欢用手机收集信息.浏览自己关注的话题.有的时候,人们会发现,不少亲朋发来的链接或者公众号推送的文章,长得特别像,但多少有那么些微不同.其实,不是写 ...

  2. CyberArticle(eLib电子图书馆)网文快捕

    CyberArticle (网文快捕)是一款知识管理软件,主要致力于网页的保存和后期管理.CyberArticle (网文快捕)主要功能,就是收集和整理网页.利用CyberArticle (网文快捕) ...

  3. 读书笔记-别说你懂写网文

    作者:千幻冰云 第一节 移动互联网时代的网络文学和商业化写作 1. 读者 读者分两类,一类是付费读者,一类是非付费读者. 2. 收入 决定网络写手收入的指标主要有两个:一是买断千字稿酬,一是读者订阅分 ...

  4. 网文作者都在使用什么写作软件?

    很多新手网文作者以及外行人都觉得,写小说使用写作软件没有必要,只要能实现码字就都一样.但,如果你有一款适合自己的写作软件,码字的过程与普通码字完全不一样.对于一名网文作者,在写小说时,如果有一个浓厚的 ...

  5. Effie:网文作者码字利器,轻松搞定日更6千字

    网文作者越来越焦虑了! 随着网文文化深入大众,越来越多的人都想进入到网文行业分一杯羹,大有内卷的态势.而且,很多的网文平台都规定,签约作者必须日更四千字或者是日更六千字,很多大神为了让读者更" ...

  6. 如何改变网文大神们一睁眼就欠读者6000字的局面

    很多人都以为网文大神们靠着"爽言爽语"征服读者.实际上网文行业是劳动密集型行业,作者们的身体,心态,都决定着网文的更新速度和质量,谁能熬到最后就是赢家. 每天一睁眼就感觉欠读者60 ...

  7. 大数据实力解读:热门网文改编是国产剧成功捷径吗?

    从去年开始,一大批优质国产电视剧以井喷的姿态走入了大家的视野.平时刷惯了英剧美剧日剧韩剧TVB的小伙伴们,喜大普奔,奔走相告,安利起了国产剧.去年的<北平无战事>,<战长沙>, ...

  8. 魔改GPT自动写网文,速度一秒十字,还能给太监作品无限续更 | 开源

    博雯 发自 凹非寺 量子位 报道 | 公众号 QbitAI 如果一个人只看网文,那会写出来怎样的文字? 看了100G网文后,这个AI模型帮你试了一下. 先来一段自由创作: 乍眼看去很有内味,而且基本是 ...

  9. redis过期机制(官网文档总结)

    官网地址:https://redis.io/commands/expire redis过期定义如下: Set a timeout on key. After the timeout has expir ...

最新文章

  1. c++模板之函数指针到函数对象:
  2. Raid mdadm lvm
  3. JMeter初探五-配置元件与参数化
  4. 初学Linux之程序安装
  5. python 多线程伪_Python每日3题什么是死锁?
  6. BlackBerry刷机教程
  7. 如何彻底卸载Anaconda3
  8. 程序猿必看10本好书推荐
  9. mybatis-缓存
  10. 数据库分页技术的实现
  11. 出去锻炼还是不让数据科学决定
  12. Lightroom:统一照片的曝光度
  13. windows添加虚拟机蓝屏的解决方法
  14. c语言中要求五个数一行,c 语言中如何一行输出五个数
  15. Windows自带的“QQ”
  16. python脚本来控制securecrt_SecureCRT 使用python脚本
  17. 数据挖掘中的分类与预测
  18. 服务器拒绝了您发送离线文件的请求,处理qq发送离线文件被提示“服务器拒绝了您发送离线文件”的方法...
  19. linux创建蓝光映像光盘,11.13 mkisofs指令:创建光盘映像文件
  20. JavaScript实现读秒按钮,按钮计时器,倒计时结束方可点击按钮(setInterval,clearInterval)

热门文章

  1. linux移动硬盘unmount报错处理
  2. 随意调节网页中 视频的播放速度
  3. 车联网平台百万级消息吞吐架构设计
  4. QNX Neutrino 虚拟机
  5. 4年4篇顶刊顶会论文 清华开源肖像线条画生成代码,惟妙惟肖模仿人类作画
  6. 商务日语学习:写作通常用语一览1
  7. ios怎么引入masonry_iOS开发-Masonry简易教程
  8. 编译kungfu1.0时产生的问题和解决方案汇总(1)
  9. 致在大学中感到迷茫或即将进入大学的你(转)
  10. vuex---$store案例、getters配置项、引入mapState、mapGettes、mapActions、mapMutations