在网页中处理ActiveXObject()的执行结果

本文介绍了一种在网页中实现文本转语音(TTS)的技术方法,并通过具体示例展示了如何利用JavaScript和SAPI实现这一功能。文章还讨论了如何处理用户交互可能导致的问题,并提供了解决方案。

如果把《在网页中使用TTS技术的例子 & 备忘录》

http://blog.youkuaiyun.com/Purpleendurer/archive/2010/07/20/5750531.aspx

的演示代码保存为html文件,再在IE中打开,会先出现一个提示框:

IE提示框.jpg

如果用户不小心点击了“否”按钮,后面的代码在执行时就会出错。

解决方法是用 try{} catch{} 来改写代码:

<SCRIPT LANGUAGE="JavaScript"> // Create the Sapi SpVoice object var VoiceObj; try { VoiceObj = new ActiveXObject("Sapi.SpVoice"); } catch(e) { //alert(e.message); VoiceObj = null; }

如果用户点击了“否”按钮,我们可以在catch{}中对VoiceObj重新赋值null。

后面的代码则根据VoiceObj的值来处理。

我们需要先把代码:

// Handle EndStream event function VoiceObj::EndStream() { idbSpeakText.value = "朗读"; } // Handle StartStream event function VoiceObj::StartStream() { idbSpeakText.value = "停止"; }

抽出来,保存到v1.js中,并加以引用。

完整的代码如下:

<HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> // Create the Sapi SpVoice object var VoiceObj; //alert(typeof(VoiceObj)); try { VoiceObj = new ActiveXObject("Sapi.SpVoice"); } catch(e) { //alert(e.message); VoiceObj = null; } </SCRIPT> <SCRIPT LANGUAGE="JavaScript"> // Code in the BODY of the webpage is used to initialize controls and // to handle SAPI events /***** Initializer code *****/ function InitializeControls() { // Initialize the Voices and AudioOutput Select boxes var VoicesToken = VoiceObj.GetVoices(); var AudioOutputsToken = VoiceObj.GetAudioOutputs(); } if (null != VoiceObj) { InitializeControls(); document.write(unescape("%3Cscript language=\"javascript\" src=\"v1.js\"%3E%3C\/script%3E")); } // SpeakText() function: // This function gets the text from the textbox and sends it to the // Voice object's Speak() function. The value "1" for the second // parameter corresponds to the SVSFlagsAsync value in the SpeechVoiceSpeakFlags // enumerated type. function SpeakText() { //alert(document.body.innerText); if (idbSpeakText.value == "朗读") { // Speak the string in the edit box try { VoiceObj.Speak(document.body.innerText, 1); } catch (exception) { alert("Error"); } } else if(idbSpeakText.value == "停止") { // Speak empty string to Stop current speaking. The value "2" for // the second parameter corresponds to the SVSFPurgeBeforeSpeak // value in the SpeechVoiceSpeakFlags enumerated type. VoiceObj.Speak( "", 2); } } // --></mce:script> <SCRIPT FOR="window" EVENT="OnQuit()" LANGUAGE="JavaScript"> // Clean up voice object delete VoiceObj; </SCRIPT> </HEAD> <body> <BUTTON id="idbSpeakText" onclick="SpeakText();">朗读</BUTTON> <P>  这场比赛跟我预想的一样,德国队被西班牙玩死了。</P> <P>  此前德国队横扫英格兰队和阿根廷队,立即吸引了众多墙头草,被捧为夺冠最大热门。</P> <P>  其实熟悉欧洲俱乐部赛事的人都知道,德国俱乐部球队遇上西班牙球队成绩都不太理想。即使在西班牙联赛中水平表现一般的赫塔菲都能给德甲领头羊拜仁慕尼黑制造难堪。作为西甲领头羊的巴萨这几年对德国球队更是捷报频传,对阵不莱梅、斯图加特、沙尔克04、拜仁慕尼黑,不仅比分占优,而且在控球、传球上的技术优势也非常明显。</P> <P>  此次西班牙对阵德国,西班牙队内首发的巴萨球员达到7人,除了巴尔德斯外,其他球员全部都上场了,普约尔和皮克坐镇后防线,哈维、布斯克茨、伊涅斯塔打中场,比利亚和佩德罗则打前锋。另外法布雷加斯和雷纳也出自巴萨青训营。而德国队首发阵容中来自拜仁的球员包括克洛泽、施魏因斯泰格和拉姆三人,如果不是托马斯-穆勒累积黄牌停赛,肯定也将是首发中的一员,而波多尔斯基和特罗肖夫斯基也曾在拜仁效力,另外替补席上的巴德施图贝尔、托尼-克罗斯、戈麦斯和布特也都是来自拜仁,也就是说这辆日尔曼战车同样有10名“拜仁帮”的球员。从一定意义上说,这场比赛就是 巴萨 vs 拜仁慕尼黑,西班牙队胜面很大。</P> </body> </html>

获取计算机MAC、硬盘ID、操作系统等信息的ActiveX库 示例程序: ClientInfoX JavaScript Sample xo=new ActiveXObject("ClientInfo.HostInfo") ////////////////////////////////////////////////// //函数与方法 ////////////////////////////////////////////////// function AddInfo(sInf) { document.getElementById("mbox").value = "\r" +sInf +document.getElementById("mbox").value; } function GetWindowsVersion() { AddInfo("GetWindowsVersion: "+xo.GetWindowsVersion()); getusername(); } function GetCPU_ID() { AddInfo("GetCPU_ID: "+xo.GetCPU_ID()); } function GetAdapterMac() { AddInfo("GetNET_ID: "+xo.GetAdapterMac(0)); } function GetIdeSerialNumber() { AddInfo("GetIdeSerialNumber: "+xo.GetIdeSerialNumber()); } function ClearmBox() { document.getElementById("mbox").value = ""; } //取得机器名,登录域及登录用户名 function getusername() { var WshNetwork = new ActiveXObject("WScript.Network"); alert("Domain = " + WshNetwork.UserDomain); alert("Computer Name = " + WshNetwork.ComputerName); alert("User Name = " + WshNetwork.UserName); } //取得系统目录 function getprocessnum() { var pnsys=new ActiveXObject("WScript.shell"); pn=pnsys.Environment("PROCESS"); alert(pn("WINDIR")); } //返回系统中特殊目录的路径 function getspecialfolder() { var mygetfolder=new ActiveXObject("WScript.shell"); if(mygetfolder.SpecialFolders("Fonts")!=null) { alert(mygetfolder.SpecialFolders("Fonts")); } } //取得磁盘信息 传入参数如:getdiskinfo('c') function getdiskinfo(para) { var fs=new ActiveXObject("scripting.filesystemobject"); d=fs.GetDrive(para); s="卷标:" + d.VolumnName; s+="------" + "剩余空间:" + d.FreeSpace/1024/1024 + "M"; s+="------" + "磁盘序列号:" + d.serialnumber; alert(s) } //取得系统目录 function getprocessnum() { var pnsys=new ActiveXObject("WScript.shell"); pn=pnsys.Environment("PROCESS"); alert(pn("WINDIR")); } //启动计算器 function runcalc() { var calc=new ActiveXObject("WScript.shell"); calc.Run("calc"); } //读取注册表中的值 function readreg() { var myreadreg=new ActiveXObject("WScript.shell"); try{ alert(myreadreg.RegRead ("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\NeroCheck")); } catch(e) { alert("读取的值不存在!"); } } //写注册表 function writereg() { var mywritereg=new ActiveXObject("WScript.shell"); try{ mywritereg.RegWrite("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\MyTest","c:\\mytest.exe"); alert("写入成功!"); } catch(e) { alert("写入路径不正确!"); } } //删除注册表 function delreg() { var mydelreg=new ActiveXObject("WScript.shell"); if(confirm("是否真的删除?")) { try{ mydelreg.RegDelete("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\MyTest"); alert("删除成功!"); } catch(e) { alert("删除路径不正确"); } } } //取得文件信息 调用方式如:getfileinfo('c:\\test.pdf') function getfileinfo(para) { var myfile=new ActiveXObject("scripting.filesystemobject"); var fi=myfile.GetFile(para); alert("文件类型:"+fi.type+"文件大小:"+fi.size/1024/1024+"M"+"最后一次访问时间:"+fi.DateLastAccessed); } //取得客户端的信息 function clientInfo() { strClientInfo="availHeight= "+window.screen.availHeight+"\n"+ "availWidth= "+window.screen.availWidth+"\n"+ "bufferDepth= "+window.screen.bufferDepth+"\n"+ "colorDepth= "+window.screen.colorDepth+"\n"+ "colorEnable= "+window.navigator.cookieEnabled+"\n"+ "cpuClass= "+window.navigator.cpuClass+"\n"+ "height= "+window.screen.height+"\n"+ "javaEnable= "+window.navigator.javaEnabled()+"\n"+ "platform= "+window.navigator.platform+"\n"+ "systemLanguage= "+window.navigator.systemLanguage+"\n"+ "userLanguage= "+window.navigator.userLanguage+"\n"+ "width= "+window.screen.width; alert(strClientInfo); } ClientInfoX.dll 实例 消息窗口
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值