检查浏览器是否支持iFrame上的加载方法
Check if browser supports load method on iFrame
我正在尝试使用针对iFrame的文件上传编写一个简单的表单。我已经涵盖了它,但是Internet Explorer不支持动态生成的iFrame上的加载方法,所以我需要为它做一种替代方法。我的问题是 - 使用 Javascript 识别浏览器类型的最佳和最准确(加上轻量级)的方法是什么?
我知道 Modernizr 可以检查特定的方法/属性,但不太确定它是否可以在此特定情况下提供帮助。它有Modernizr.hasEvent()
,但我不能用它来检查动态创建的元素。
在我看来,检查这一点的最简单方法是:
if ('onload' in iFrameVar)
{
console.log('your code here');
}
其中 iFrameVar 是对 iframe 的引用,当然:
function elemSupportsEvent(elem,e)
{
var f = document.createElement(elem);
if (e in f)
{
console.log(elem + ' supports the '+ e + ' event');
return true;
}
console.log(elem + ' doesn''t support the '+ e + ' event');
return false;
}
elemSupportsEvent('iframe','onload');//logs "iframe supports the onload event" in chrome and IE8
只是通过示例快速摆弄一下如何使用函数来检查各种元素的事件支持。
回应您的评论:如果您想检查动态内容 - 就像在 ajax 回复中一样 - 您可以简单地使用 readystatechange
事件:
xhr.onreadystatechange = function()
{
if (this.readyState === 4 && this.status === 200)
{
var parent = document.getElementById('targetContainerId');//suppose you're injecting the html here:
parent.innerHTML += this.responseText;//append HTML
onloadCallback.apply(parent,[this]);//call handler, with parent element as context, pass xhr object as argument
}
};
function onloadCallback(xhr)
{
//this === parent, so this.id === 'targetContainerId'
//xhr.responseText === appended HTML, xhr.status === 200 etc...
alert('additional content was loaded in the '+ this.tagName.toLowerCase+'#'+this.id);
//alerts "additional content was loaded in the div/iframe/td/whatever#targetContainerID"
}
如果你想检查对特定事件的支持,你可以尝试这样的事情:
var isEventSupported = (function(){
var TAGNAMES = {
'select':'input','change':'input',
'submit':'form','reset':'form',
'error':'img','load':'img','abort':'img'
}
function isEventSupported(eventName) {
var el = document.createElement(TAGNAMES[eventName] || 'div');
eventName = 'on' + eventName;
var isSupported = (eventName in el);
if (!isSupported) {
el.setAttribute(eventName, 'return;');
isSupported = typeof el[eventName] == 'function';
}
el = null;
return isSupported;
}
return isEventSupported;
})();
这是上述内容的现场演示:
http://kangax.github.com/iseventsupported/
使用 navigator.userAgent
.它包含浏览器用户代理
if (navigator.userAgent.search("MSIE 6") == -1){
// We've got IE.
}
相关文章:
- jQuery加载方法字符集
- html5:一个很好的加载方法
- 检查浏览器是否支持iFrame上的加载方法
- ExtJS文件加载方法
- 陷入jQuery加载方法
- 使用jquery加载方法是一种好的做法吗
- JWPlayer在使用API加载方法时无法在iPad / iPhone上播放
- 如何在页面加载方法中调用 Javascript 函数
- HTML5 / Javascript图像加载方法和传递给变量
- ID 存储在 JS 变量中的 AJAX 加载方法
- 使用加载方法发送表单后隐藏“提交”按钮
- 在JQuery加载方法中使用post传递数据
- 如何调整jQuery加载的内容的大小's使用CSS的加载方法
- jQuery()在for循环内部加载方法,如何在出现错误时退出
- 重新加载方法:响应文本与窗口.位置.href(1 次旅行与 2 次)
- 使用Jquery加载方法与Slick插件
- Jquery加载方法上传多个页面
- Php包含方法和Jquery加载方法
- 将焦点设置在使用jQuery加载方法导入的其他页面的元素上
- 触发器以编程方式选择加载方法