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

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

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

 

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

 

 

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

 

 

解决方法是用 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" οnclick="SpeakText();">朗读</BUTTON>   
<P>  这场比赛跟我预想的一样,德国队被西班牙玩死了。</P>   
<P>  此前德国队横扫英格兰队和阿根廷队,立即吸引了众多墙头草,被捧为夺冠最大热门。</P>   
<P>  其实熟悉欧洲俱乐部赛事的人都知道,德国俱乐部球队遇上西班牙球队成绩都不太理想。即使在西班牙联赛中水平表现一般的赫塔菲都能给德甲领头羊拜仁慕尼黑制造难堪。作为西甲领头羊的巴萨这几年对德国球队更是捷报频传,对阵不莱梅、斯图加特、沙尔克04、拜仁慕尼黑,不仅比分占优,而且在控球、传球上的技术优势也非常明显。</P>   
<P>  此次西班牙对阵德国,西班牙队内首发的巴萨球员达到7人,除了巴尔德斯外,其他球员全部都上场了,普约尔和皮克坐镇后防线,哈维、布斯克茨、伊涅斯塔打中场,比利亚和佩德罗则打前锋。另外法布雷加斯和雷纳也出自巴萨青训营。而德国队首发阵容中来自拜仁的球员包括克洛泽、施魏因斯泰格和拉姆三人,如果不是托马斯-穆勒累积黄牌停赛,肯定也将是首发中的一员,而波多尔斯基和特罗肖夫斯基也曾在拜仁效力,另外替补席上的巴德施图贝尔、托尼-克罗斯、戈麦斯和布特也都是来自拜仁,也就是说这辆日尔曼战车同样有10名“拜仁帮”的球员。从一定意义上说,这场比赛就是 巴萨 vs 拜仁慕尼黑,西班牙队胜面很大。</P>   
</body>   
</html>
相关文章
|
3月前
|
网络协议
浅谈网页从请求到显示的过程
浅谈网页从请求到显示的过程
|
24天前
|
JSON 移动开发 JavaScript
在浏览器执行js脚本的两种方式
【10月更文挑战第20天】本文介绍了在浏览器中执行HTTP请求的两种方式:`fetch`和`XMLHttpRequest`。`fetch`支持GET和POST请求,返回Promise对象,可以方便地处理异步操作。`XMLHttpRequest`则通过回调函数处理请求结果,适用于需要兼容旧浏览器的场景。文中还提供了具体的代码示例。
在浏览器执行js脚本的两种方式
|
5天前
|
JavaScript 前端开发 API
浏览器渲染过程中如何处理异步任务
在浏览器渲染过程中,异步任务通过事件循环机制处理。JS执行时,同步任务在主线程上执行,形成一个执行栈。异步任务则被推入任务队列中,待主线程空闲时按顺序调用,确保页面流畅渲染与响应。
|
3月前
|
数据采集 JSON JavaScript
如何通过 PhantomJS 模拟用户行为抓取动态网页内容
随着网页技术的进步,JavaScript 动态加载内容已成为新常态,对传统静态网页抓取提出挑战。PhantomJS 作为无头浏览器,能模拟用户行为并执行 JavaScript,成为获取动态网页内容的有效工具。本文介绍如何使用 PhantomJS 结合爬虫代理 IP 技术,抓取大众点评上的商家信息,包括店名、地址和评分等关键数据,从而更高效地获取动态网页内容,支持数据收集与分析。
219 13
如何通过 PhantomJS 模拟用户行为抓取动态网页内容
|
5月前
|
JavaScript 前端开发 UED
【源码分享】简单的404 HTML页面示例,该页面在加载时会等待2秒钟,然后自动重定向到首页
【源码分享】简单的404 HTML页面示例,该页面在加载时会等待2秒钟,然后自动重定向到首页
401 0
|
7月前
|
数据采集 安全 Go
一文看懂 如何操作浏览器访问网页
一文看懂 如何操作浏览器访问网页
149 0
|
Web App开发 JavaScript 前端开发
浏览器页面卡住定位分析
有童鞋在xxx系统页面反馈,遇到在弹出框后整个页面卡住无法使用的情况,属于必现问题。因此需要跟踪定位问题。
512 0
浏览器页面卡住定位分析
检测浏览器刷新还是退出代码 #127
检测浏览器刷新还是退出代码 #127
69 0
|
Web App开发 存储 缓存
【7000字】一晚上爆肝浏览器从输入到渲染完毕原理
Chrome comic,推荐一本Chrome架构简要概述的漫画,Chrome架构于2008年同Chrome浏览器一起发布,原文地址,中文翻译。
210 0
【7000字】一晚上爆肝浏览器从输入到渲染完毕原理