【问题标题】:Google voice search on page load页面加载时谷歌语音搜索
【发布时间】:2013-09-08 07:36:30
【问题描述】:

首先,我正在尝试创建一个我不希望永远有效的临时解决方案。如果你愿意,只是一个实验!

我正在运行以下内容! 我想要做的是在页面加载时启动语音搜索。 任何想法让这个工作! 注意:您需要 chrome 浏览器才能看到麦克风输入。

http://jsfiddle.net/dirtyd77/99amf/

<html>
<head>
<style>

#mike {
font-size: 25px;
width: 25px;
height: 25px;
cursor:pointer;
border: none;
position: absolute;
margin-left: 5px;
outline: none;
background: transparent;
}
#txt {
height: 150px;
width: 150px;
}
</style>

<script>
var mike = document.getElementById('mike');
mike.onfocus = mike.blur;
mike.onwebkitspeechchange = function(e) {
console.log(e); // SpeechInputEvent
document.getElementById('txt').value = mike.value;  
};
</script>
</head>

【问题讨论】:

    标签: javascript jquery html speech-recognition


    【解决方案1】:

    很遗憾,这是不可能的。最重要的原因是它将是invasion of privacy/security hazard。用户必须自愿选择被记录(在这种情况下,通过鼠标点击)。如果可以模拟事件并且用户不知道他们正在被记录,则可能会产生严重的法律后果。希望这会有所帮助!


    更新:

    这是来自document 关于Speech Input

    为了最大程度地减少用户无意中让网页在他们不知情的情况下录制语音的可能性,如果网页失去了对另一个窗口或同一用户代理中另一个选项卡的输入焦点,实现必须中止活动的语音输入会话。

    这是来自同一 document 的担忧:

    1) 从安全角度来看,口述密码输入可能存在问题,但由用户决定是否要说出自己的密码。

    2) 语音输入可能被用于窃听用户。恶意网页可以使用诸如隐藏输入元素或以其他方式使用户相信它已停止录制语音而继续这样做的技巧。他们还可以潜在地设置输入元素的样式以显示为其他内容并诱使用户单击它们。可以在http://www.quirksmode.org/dom/inputfile.html 看到样式化文件输入元素的示例。上述建议旨在降低此类攻击的风险。

    另外,根据this article from html5rocks.com

    第一次使用语音识别时,Chrome 需要询问用户使用麦克风的权限,在这种情况下,只有在用户允许时才会触发 onstart。

    考虑到这一点,如果不是几乎不可能的话,在未经用户同意的情况下实施onload 事件将是非常困难,因为 Google 已采取措施防止malicious webpages。谷歌还阻止用户使用simulating click events

    【讨论】:

    • 不可能还是合法性问题?无论如何,这仅供我使用,所以我不担心法律影响,因为我知道:)。不过感谢您提供的信息。
    • lists.w3.org/Archives/Public/public-xg-htmlspeech/2011Feb/… 声明用户代理只能在用户明确、知情的情况下开始语音输入会话。用户同意可以包括,例如:之前授予的始终允许此网页的语音输入的同意。
    • @tman 我会在我的原始帖子中添加更多信息,但我会回答这个问题:)
    • 因此,鉴于我确实计划将其用于个人用途,您认为它是否值得寻找解决方法,或者我是否正在反对一些很难做到的事情。
    • @tman 好吧,这取决于...您的目标到底是什么?您需要在网络浏览器上进行语音识别吗?
    【解决方案2】:

    在尝试了一堆东西和研究之后,我发现:

    您无法以编程方式激活语音输入。这是为了防止滥用。 https://code.google.com/p/html5rocks/issues/detail?id=594

    来自谷歌。

    竭尽全力让 jFiddle 工作。使用了一堆 jquery 函数,尝试了 target 来模拟点击,一些第三方的东西——看起来他们已经得到了很好的保护。

    【讨论】:

    • 此页面显示“之前已同意始终允许此网页的语音输入。”如果是这种情况,那么问题出在哪里?
    • 我想我最初发布了错误的链接。在谷歌论坛上发布链接,而不是谷歌表单的实际链接。现在都修好了。试图为你破解这个,但没有成功。起初我以为是 jFiddle 给我带来了问题,然后当我无法修复它时,我发现谷歌开发人员在 chrome 代码中阻止了这个。
    【解决方案3】:

    您可以使用不需要单击按钮即可激活的 webkitSpeechRecognition。然后只需将您捕获的任何文本输入到输入中。

    webkitSpeechRecognition 会提示用户授权站点使用麦克风,但只要该权限存在,它就可以在页面加载后立即开始监听用户输入。确保您的网站使用 HTTPS,以便浏览器只向用户请求一次权限并记住它。

    您可能还想查看annyang,这是一个让处理语音识别变得超级简单的 JavaScript 库。

    【讨论】:

    • 能否详细说明 HTTPS 评论?或者也许是关于这一点的更多信息的链接。谢谢。
    • 当您第一次在页面上激活 webkitSpeechRecognition 时,浏览器会要求您授予该站点使用您的麦克风的权限。托管在 HTTPS 上的页面不需要反复请求许可,而 HTTP 托管的页面则需要。比较talater.com/annyangtalater.com/annyang可以看出区别
    • 谢谢,这是一条非常有用的非显而易见的信息。在 annyang 上做得很好,喜欢简单的 facebook.js 实现。
    • 谢谢。准备好后,我会很高兴看到你在做什么。如果您最终使用了 annyang,请告诉我它对您的效果如何,以及是否有您认为应该添加/更改的任何功能。
    【解决方案4】:

    您是否尝试过这种方法:

    x-webkit-speech: onwebkitspeechchange not resting the value

    如果您查看示例,他们完全通过

    做其他事情
    onwebkitspeechchange="webkitSpeechChange(this);"
    

    我想您需要将其添加到您的代码中。

    【讨论】:

    • 问题是模拟鼠标点击麦克风按钮!似乎没有任何效果。
    • 也许,我在这里遗漏了一些东西,但在你的小提琴中,你正在调用一个你从未声明过的函数?
    【解决方案5】:

    首先想到的是使用 jQuery。以下是一些操作方法:

    $(document).ready(function(){
      startMikeInput();
    }
    

    这将在页面加载完成后启动您的麦克风输入。您还需要在脚本标签中引用 jQuery。使用外部 js 文件也可能会有所帮助。

    【讨论】:

    • 如果您在本地运行它,您需要下载 jQuery 并正确引用它。我以前遇到过这个问题。
    • startmikeInput();这是什么问题都没有。
    猜你喜欢
    • 2016-07-27
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 2011-10-22
    相关资源
    最近更新 更多