JS嵌入到Java程序中

JS嵌入到Java程序中,第1张

随着java 的出现 向java嵌入javascript脚本变的特别容易 java 引入了一个新的javax script包 为脚本化语言提供了一个通用接口

案例 小说 网java中嵌入javascript脚本的思路

取得脚本解释器的管理器Manager

从管理器中取得js的解释器实例ScriptEngine

取得存储javascript变量的Bindings实例

把一个java io Reader流及Bindings传递给ScriptEngine的eval()方法 从而运行存储在外部文件中的脚本 eval()方法返回脚本运行结果 如果执行中发生错误 会抛出ScriptException异常

例 运行javascript脚本的一个java程序

import java io *   import javax script Bindings   import javax script ScriptEngine   import javax script ScriptEngineManager   import javax script ScriptException    /**author by ?id=  */public class RunScript {       public static void main(String[] args) throws IOException{           ScriptEngineManager scriptManager = new ScriptEngineManager()//得到解释器的管理器 里面有很多种脚本解释器           ScriptEngine js = scriptManager getEngineByExtension( js )//从管理器中获取js的解释器           //定义我们要运行的脚本文件           String filename = null           //通过解释器来获得存储javascript变量的Bindings的实例 使它们提供给脚本            Bindings bindings = js createBindings()           //处理参数 参数是定义的脚本的变量 参数可能包括 Dname/value对 我们要进行处理 任何参数不能以 D 为文件名开始           for(int i =  i<args lengthi++){               String arg = args[i]               if(arg startsWith( D )){//如果参数是以 D 开头 则进行处理                   int pos = arg indexOf( = )                   if(pos ==  ) usage()                   String name=arg substring( pos)                   String value= arg substring(pos+ )                   //注意 我们定义的所有的变量是字符串 如果必要的话 我们可以通过java lang Number  一个java lang Boolean 任何Java对象或NULL 将脚本转换为其他类型                    bindings put(name  value)//脚本中的变量存入bindings实例中               }else{                   if(filename!=null)usage()                   filename=arg               }           }           //这里是为了确保我们得到了一个文件的参数            if(filename==null){               usage()           }           //增加一个具有约束力的使用特殊的保留变量名称 告诉脚本引擎的文件的名称将执行 这使它能够提供更好的错误信息           bindings put(ScriptEngine FILENAME  filename)           //读取文件的流           Reader in = new FileReader(filename)           try{               //执行脚本并取得结果 注意in就相当于js中的脚本 而bindings是脚本执行所需要的变量               Object result = js eval(in bindings)               System out println(result)           }catch(ScriptException ex){               //执行过程中出异常则显示一个错误信息               System out println(ex)           }       }       static void usage(){           System err println( Usage: java RunScript[ Dname=value] script js )           System exit( )//异常退出程序 如果正常退出程序用System exit( )       }   }

这段代码中所创建的Bindings对象不是静态的 JavaScript脚本所创建的所有的变量都存储在这里 下面是一个脚本化Java的更加实用的例子 它将它的Bindings对象存储在一个具有较高的作用域的ScriptContext对象中 以便可以读取其变量 但是新的变量就不存储到Binhdings对象中 这个例子实现了一个简单的配置文件工具 即一个文本文件 用来定义名字/值对 可以通过这里定义的Configuration类来查询它们 值可能是字符串 数字或布尔值 并且 如果一个值包含在花括号中 那么它就会传递给一个JavaScript解释器去计算 java util Map对象保存了这些包装在一个SimpleBindings对象中的值 这样一来 JavaScript解释器也可以访问同一个文件中定义的其他变量的值

lishixinzhi/Article/program/Java/JSP/201311/19250

三种:

1、引入外部js

2、文档内部标签<javascript></...>

3、行内js——javascript:return void(null)或javascript:return confirm("……")等

javascript不可以调用本地程序 如果只是单一的本机的话没意义, 不过也有其他方法

基于浏览器的应用,表现力始终不够丰富,我们常常会想,在一个网页中,点一下某个链接,能够直接调用安装好的可执行程序有多好啊。按照微软的推荐,应该是通过ActiveX,把可执行程序嵌入到网页中,例如flash的ActiveX。这样,我们就要购买ActiveX的签名,不通过签名的东西,在IE6中是无法加载的,为一个小项目购买ActiveX的签名,代价太昂贵了。另外,很多时候还要考虑如果用户突然关闭了浏览器该怎么办。这对播放个flash、歌曲之类的没多大影响,但是很多时候,不能在关闭前清扫战场,带来的后果是灾难性的。通常,在企业应用中,我们总是通过IE直接调用exe。

在windows中,注册表中包含各种协议(http,ftp,telnet等)的信息,包含了默认打开方式的参数。试一下,从IE的地址栏中输入telnet://www.163.com,出现什么了?d出了一个命令行窗口,开始进行telnet *** 作。IE居然能完成这个,那么为什么就不能完成“telnet1://参数” 呢?

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\notenote]

@="URL:notenoteProtocol"

"URL Protocol"="notepad.exe"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\notenote\DefaultIcon]

@="notepad.exe,1"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\notenote\shell]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\notenote\shell\open]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\notenote\shell\open\command]

@="\"notepad.exe\",\"%1\""

把这个东西导入注册表,那么我们在浏览器中输入notenote:// 你将有惊喜的收获。

到这里,思路就清晰了,我们的安装程序中,在注册表中建个协议,例如上面的notenote,再把要执行的exe的路径信息写入,在网页直接一个超链接,协议://参数就可以了。exe文件接受这个参数,进行相应的处理。搞定。

记住,协议://后面的所有字符串被看做是一个参数。那么,exe文件永远只有两个参数,参数0是它的完整执行路径,参数1就是网页传过来的字符串。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8074994.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存