如何访问JavaScript中的Chrome拼写检查build议

如何在JavaScript中检测textarea中的拼写错误? 有没有与此相关的事件? 如何访问Chrome的拼写检查build议拼写错误的单词?

如何访问Chrome的拼写检查build议拼写错误的单词?

据我所知, 你不能 。 为了更全面地回答,我还会提到相关的问题:

  • 曾经有一个非官方的Google拼写检查API 消失了
  • 您可以下载但不能访问 Chrome的内置字典
  • 谷歌词典没有开放的API

有没有与此相关的事件?

否, contextmenu事件也没有提供任何有用的用途:它没有拼写检查信息,也不能读取上下文菜单项(可能包含拼写build议)的列表。 change事件也不提供拼写检查信息。

如何在JavaScript中检测textarea中的拼写错误?

您可以自己编写代码或使用第三方库。 还有关于这个主题的其他堆栈溢出问题,或者你可以自己search。 相关的堆栈溢出问题包括:

  • JavaScript拼写检查方法
  • JavaScript拼写检查器的build议
  • 基于JavaScript的Web应用程序拼写检查器
  • 将拼写检查添加到我的网站
  • 需要DIV的客户端拼写检查器
  • JavaScript拼写检查

由于这个问题似乎有点广泛和开放的解释(特别是对于当前的赏金要求),我将首先解释我如何解释它,并尝试回答过程中的子问题(Q / A风格)。

你似乎在问:

“Google Chrome”/“Chromium”具体为:

  1. 问:如果浏览器“Google Chrome”/“Chromium” 公开了一个拼写检查API ,您可以通过在一个普通的网页上 使用JavaScript与之交互
    答:不,不是(至less不是你想要的方式)。
    有一个铬特定的拼写检查API 提案 (从2012年12月)。

    这里有一些部分:

    这个API可以成为networking平台的一部分吗?
    拼写检查不太可能成为networking平台的一部分。

    更重要的是,它只有一个叫做“loadDictionary”的方法:

     loadDictionary( myDictionaryFile // string path or URL , dictionaryFormat // enumerated string [ "hunspell" (concatentation of .aff and .dic files) // , "text" (plain text) // ] ) // returns int indicating success or an error code in loading the dictionary. 

    重点? 帮助社区为祖鲁语,克林贡语等创build自定义字典,因为大约20-30%的Spellcheck错误关系是关于不支持的语言的。

    现在,我们不要将Chrome的SpellCheck API (上面)与Chrome / Webkit的SpellCheck API混淆了(胡说什么?):
    Hironori Bono(谷歌浏览器的软件工程师)在2011年左右提出了一个API ,并提供了一些相关的bug关系以及Chrome中的一个补丁 (/仍然是?)。

     void addSpellcheckRange( unsigned long start , unsigned long length , DOMStringList suggestions // [, unsigned short options] ); void removeSpellcheckRange(SpellcheckRange range); 

    用法示例:

     var input = document.querySelector('input'); input.addSpellcheckRange( 4 , 9 , [ 'Chrome' , 'Firefox' , 'Opera' , 'Internet Explorer' ] ); 

    来自http://peter.sh/experiments/spellcheck-api/
    资料来源:
    http://html5-demos.appspot.com/static/html5-whats-new/template/index.html#42
    http://peter.sh/experiments/spellcheck-api/ (如果这个API仍然有效,你应该可以在那里试试。)
    重点? 在思考了几天之后,它突然点击:使用浏览器的上下文菜单进行自定义拼写检查集成,而不是阻止它并提供自己的。 所以可以将其与现有的外部拼写检查库链接。

    上面的历史和实验API显然从来没有直接支持你想要完成的。

  2. 问:如果“Chrome浏览器”/“Chromium”拼写检查API暴露了(例如)textarea上的“onSpellError”(-like) 事件
    答:如上所述,Chrome似乎没有这样的事件。
    HTM5目前只能显示启用或禁用对拼写检查支持元素的拼写检查function。
  3. 问:如何访问Chrome的拼写检查build议拼写错误的单词
    答:如上所述:看来你不能。 这似乎是几乎重复的问题相同的答案: 我如何访问Chrome的拼写检查字典?
    有趣的是,“ TinyMCE的拼写检查工具之前是由谷歌拥有的Chrome工具栏API对Google自己的合法使用政策进行”黑客攻击“提供的,这种拼写检查服务已经被永久终止 。 现在,如果你search网页,你可能会发现他们是如何做到的,但是看起来似乎并不是最好的方法(并在此提倡)。
    使用JavaScript拼写检查库,你可以使用Chrome的字典(所以你不需要维护字典),但你必须提供和运输这些文件与您的networking应用程序(而不是在浏览器中获取已安装的)。

一般:

  1. 问:如何在JavaScript中检测textarea中的拼写错误
    答: Internet Explorer允许使用通过ActiveX集成到Microsoft Word中的拼写检查程序,如以下代码段中所列。

     function CheckText(text) { var result = new Array; var app = new ActiveXObject('Word.Application'); var doc = app.Documents.Add(); doc.Content = text; for (var i = 1; i <= doc.SpellingErrors.Count; i++) { var spellingError = doc.SpellingErrors.Item(i); for (var j = 1; j <= spellingError.Words.Count; j++) { var word = spellingError.Words.Item(j); var error = {}; error.word = word.Text; error.start = word.Start; error.length = word.Text.length; error.suggestions = new Array; var suggestions = word.GetSpellingSuggestions(); for (var k = 1; k <= suggestions.Count; k++) { error.suggestions.push(suggestions.Item(k).Name); } result.push(error); } } return result; } 

    资料来源: https : //lists.w3.org/Archives/Public/public-webapps/2011AprJun/0516.html

    但是IE / ActiveX / MS-Word并不是真正的你所要求的,它也不是跨平台/浏览器, 我们用本地的JavaScript拼写检查库
    JavaScript拼写检查方法
    http://code.google.com/p/bjspell/
    http://www.javascriptspellcheck.com/
    http://ejohn.org/blog/revised-javascript-dictionary-search/
    等等。
    比较/解释它们实际上超出了这个答案的范围。
    值得注意的是你希望使用哪种字典格式!

    或者,可以使用外部拼写检查API服务(服务器处理数据,并使用AJAX与之通信)。
    显然你需要考虑到隐私问题!

赏金要求“要求:

  1. 问:确切的证据
    答:我应该find更多关于这个问题的东西,而不是一些深奥的实验function。 我也没有看到图书馆试图将他们的function填充到一些(即将到来的)标准化的方法/事件标识符等。
    如前所述,TinyMCE等stream行的图书馆目前也没有其他解决scheme。
    在“生活水平”/“世界是我们的游乐场”的心态中,当我按下“提交”button时,我的回答可能已经过时了。 但即使如此,在不久的将来,我也不会在“制作”级网站/界面上推荐这样的实验性function。
  2. 问:获得一个很好的答案,解释如何实现这一点
    (铬特定或一般?拼写检查build议或检测到有一个错字?)
    答:除了上述之外,我想不出任何东西(除了networking开发者目前使用的库(见4))。

希望这可以帮助!

没有用于访问Chrome浏览器的拼写检查build议的API,也不存在当文字错误input时发生的任何事件。 但是,事件可以实施。

我不知道你的用例是什么,但是我在MashApe上使用了montanaflynn的Spellcheck API 。 演示观看一个文本区域,当用户暂停input时,它通过API发送文本进行testing。 API将返回包含原始string,build议更正的string和包含更正的单词及其build议replace的对象的JSON。

build议显示在textarea下面。 当build议被搁置时,input错误的单词被突出显示。 点击时,错字被replace为build议。

我还添加了一个混洗function,在发送之前对string中的单词进行加扰,为使用API​​(也使用SSL)添加一层隐私。 API和Chrome都不使用基于上下文的build议,所以洗牌不会改变结果。

这是CodePen的链接: http ://codepen.io/aecend/pen/rOebQq

这里是代码:

CSS

 <style> * { font-family: sans-serif; } textarea { margin-bottom: 10px; width: 500px; height: 300px; padding: 10px; } .words { width: 500px; } .word { display: inline-block; padding: 2px 5px 1px 5px; border-radius: 2px; background: #00B1E6; color: white; margin: 2px; cursor: pointer; } </style> 

HTML

 <textarea id="text" placeholder="Type something here..."></textarea> <div id="words"></div> 

JavaScript的

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> <script> ;(function(){ "use strict"; var words = document.getElementById("words"), input = document.getElementById("text"), timeout, xhr; input.addEventListener("keyup", function(e){ if (timeout) clearTimeout(timeout); if (!this.value.trim()) words.innerHTML = ''; timeout = setTimeout(function() { var test_phrase = shuffle_words( input.value ); spell_check(test_phrase); timeout = null; }, 500); }); function shuffle_words(inp) { inp = inp.replace(/\s+/g, ' '); var arr = inp.split(" "), n = arr.length; while (n > 0) { var i = Math.floor(Math.random() * n--), t = arr[n]; arr[n] = arr[i]; arr[i] = t; } return arr.join(' '); } function spell_check(text){ if (xhr) xhr.abort(); xhr = $.ajax({ url: 'https://montanaflynn-spellcheck.p.mashape.com/check/', headers: { 'X-Mashape-Key': 'U3ogA8RAAMmshGOJkNxkTBbuYYRTp1gMAuGjsniThZuaoKIyaj', 'Accept': 'application/json' }, data: { 'text': text }, cache: false, success: function(result){ xhr = null; suggest_words(result); } }); } function suggest_words(obj){ if (!obj.corrections) return; words.innerHTML = ''; for (var key in obj.corrections) { if (obj.corrections.hasOwnProperty(key)) { var div = document.createElement("div"); div.className = "word"; div.innerHTML = obj.corrections[key][0]; div.orig = key; div.onmouseover = function() { var start = input.value.indexOf(this.orig); input.selectionStart = start; input.selectionEnd = start + this.orig.length; }; div.onmouseout = function() { var len = input.value.length; input.selectionStart = len; input.selectionEnd = len; } div.onclick = function() { input.value = input.value.replace(this.orig, this.innerHTML); this.parentNode.removeChild(this); } words.appendChild(div); } } } })(); </script> 

我只使用jQuery来简化此演示的AJAX请求。 这可以很容易地在香草JS中完成。

您可以禁用内部浏览器拼写检查,并集成任何其他开源拼写检查库,例如JavaScript SpellCheck 。 它包含您可能需要进行深度集成的所有事件,请检查API页面 。