html - 如何始终检测浏览器对 HTML5 搜索输入的支持?

标签 html cross-browser internet-explorer-10 html-input browser-feature-detection

我在 HTML 5 页面上有一个搜索输入,我需要在多个浏览器中工作:

<input type="search" placeholder="type here..." />

我通过查看浏览器是否将其呈现为 search 来检测浏览器是否支持搜索。输入或常规 text一:

var supportsHtml5Search = !!(inputDomElement.type !== 'text');
if (supportsHtml5Search) {
    inputDomElement.addEventListener('search', searchFunction);
}
else {
    // This browser doesn't support onsearch event, so handle keyup instead
    inputDomElement.addEventListener('keyup', searchFunction);
}

这很好用——Chrome 和 Safari 使用了 onsearch事件(当他们点击清晰的 X 图标时也有帮助地触发)并且 IE 使用了 keyup事件(此处未显示一些额外的检查)。

然而,这似乎在 IE10 中被破坏了,它显示了一个 search<input type="text" /> 完全相同(如 IE9 及以下版本)并返回 search作为类型(如 Chrome/Webkit),但不会触发 onsearch事件。

是否有更好的方法来检测搜索输入支持?

嗅探此功能支持的最佳方式是什么?

最佳答案

This article描述了一种检测事件支持本身的强大方法 - 因为您的情况与功能支持不同时又是另一种情况。

基本上,必须测试相应元素的相应属性(例如,onsearch 用于 search 事件)。喜欢...

'onsearch' in document.documentElement; // true in Chrome, false in Firefox/Opera

文章中指出,如果在错误的元素上完成,Firefox 将无法通过检查,但实际上我发现只有 Opera 有这种行为:

'onchange' in document.documentElement; // false in Opera, true in Firefox/Chrome
'onchange' in document.createElement('input'); // true in Opera too

作为最后的手段,可以尝试为这个元素分配一个处理程序,然后再次检查这个属性:

var el = document.createElement('input'); 
el.setAttribute('onsearch', 'return;'); 
typeof el.onsearch; // 'function' in Chrome, 'undefined' in Firefox/Opera

关于html - 如何始终检测浏览器对 HTML5 搜索输入的支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15138472/

相关文章:

javascript - 我的 jquery 脚本只能在 Firefox 中运行,为什么?

javascript - 浏览器在尝试创建渲染上下文时会抛出错误吗?

html - 如何强制IE10在IE9文档模式下渲染页面

jquery - IE10 和 jQuery : SCRIPT5009: "$" is undefined

css - 第一个 div 在上面

javascript - 有没有办法从 Chart.js 的条形图中删除多余的空间和水平线?

php - 我应该选择 AJAX 和 JQuery 的复杂性和速度还是 GET 的简单性?

javascript - 从 mysql 查询推送 javascript 数组对象

javascript - 检测 console/devtools 是否在所有浏览器中打开

请求中的 Javascript、BackboneJS、oData 单引号