在IE中没有开发人员控制台的情况下,JavaScript无法运行(缺少控制台的can';t属性)
我正在编写一个web应用程序平台,为浏览器提供JavaScript应用程序。不用说,我在加载文档后使用JS方法启动了一个应用程序,但在IE9上,如果开发人员控制台没有被篡改,则不会发生任何事情 这似乎是典型的控制台缺失问题,但我无法通过添加控制台检查或从源代码中删除控制台调用来修复它 你们能指出我哪里出了问题吗在IE中没有开发人员控制台的情况下,JavaScript无法运行(缺少控制台的can';t属性),javascript,internet-explorer,console,Javascript,Internet Explorer,Console,我正在编写一个web应用程序平台,为浏览器提供JavaScript应用程序。不用说,我在加载文档后使用JS方法启动了一个应用程序,但在IE9上,如果开发人员控制台没有被篡改,则不会发生任何事情 这似乎是典型的控制台缺失问题,但我无法通过添加控制台检查或从源代码中删除控制台调用来修复它 你们能指出我哪里出了问题吗 网站: JS资料来源: 我在同一平台上提供多个独立的web应用程序,因此您还可以查看以下内容(问题似乎完全相同): 并非所有版本的internet explorer都支持O
- 网站:
- JS资料来源:
if (!Object.keys) {
Object.keys = (function () {
var hasOwnProperty = Object.prototype.hasOwnProperty,
hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
dontEnums = [
'toString',
'toLocaleString',
'valueOf',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'constructor'
],
dontEnumsLength = dontEnums.length
return function (obj) {
if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object')
var result = []
for (var prop in obj) {
if (hasOwnProperty.call(obj, prop)) result.push(prop)
}
if (hasDontEnumBug) {
for (var i=0; i
如果(!Object.keys){
Object.keys=(函数(){
var hasOwnProperty=Object.prototype.hasOwnProperty,
HasdontenUnbug=!({toString:null}).propertyIsEnumerable('toString'),
多特南=[
“toString”,
“Tolocalesting”,
“价值”,
“hasOwnProperty”,
“isPrototypeOf”,
“propertyIsEnumerable”,
“构造函数”
],
dontEnumsLength=dontEnums.length
返回函数(obj){
如果(typeof obj!='object'&&typeof obj!=='function'| | obj===null)抛出新的TypeError('object.keys在非对象上调用')
var结果=[]
用于(obj中的var prop){
if(hasOwnProperty.call(obj,prop))result.push(prop)
}
如果(hasDontEnumBug){
对于(var i=0;i
此外,您检查console是否存在的方法是错误的:
试着跑步(http://jsfiddle.net/PytAh/)在internet explorer中:
if(控制台){
警惕(“那里”);
}否则{
警惕(“不存在”);
}
它将生成一个错误,显示控制台不存在。
您可以将其替换为:
if(window.console){
警惕(“那里”);
}否则{
警惕(“不存在”);
}
并非所有版本的internet explorer都支持Object.keys:
请参阅以下资料:
以下内容(来自上面提到的源代码)将Object.keys添加到不支持它的浏览器中:
if (!Object.keys) {
Object.keys = (function () {
var hasOwnProperty = Object.prototype.hasOwnProperty,
hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
dontEnums = [
'toString',
'toLocaleString',
'valueOf',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'constructor'
],
dontEnumsLength = dontEnums.length
return function (obj) {
if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object')
var result = []
for (var prop in obj) {
if (hasOwnProperty.call(obj, prop)) result.push(prop)
}
if (hasDontEnumBug) {
for (var i=0; i
如果(!Object.keys){
Object.keys=(函数(){
var hasOwnProperty=Object.prototype.hasOwnProperty,
HasdontenUnbug=!({toString:null}).propertyIsEnumerable('toString'),
多特南=[
“toString”,
“Tolocalesting”,
“价值”,
“hasOwnProperty”,
“isPrototypeOf”,
“propertyIsEnumerable”,
“构造函数”
],
dontEnumsLength=dontEnums.length
返回函数(obj){
如果(typeof obj!='object'&&typeof obj!=='function'| | obj===null)抛出新的TypeError('object.keys在非对象上调用')
var结果=[]
用于(obj中的var prop){
if(hasOwnProperty.call(obj,prop))result.push(prop)
}
如果(hasDontEnumBug){
对于(var i=0;i
此外,您检查console是否存在的方法是错误的:
试着跑步(http://jsfiddle.net/PytAh/)在internet explorer中:
if(控制台){
警惕(“那里”);
}否则{
警惕(“不存在”);
}
它将生成一个错误,显示控制台不存在。
您可以将其替换为:
if(window.console){
警惕(“那里”);
}否则{
警惕(“不存在”);
}
谢谢你的回答。你能澄清一下catch有什么问题吗?它似乎至少在IE9上起到了作用,因为我在运行它之后无法再次捕获丢失的控制台。无论如何,Object.keys catch似乎起到了作用,非常感谢。我为这些东西创建了规范化函数,所以我很容易处理这些东西以后还会出现。你现在可以在网站上查看它们,键入“proot.normalize”到开发人员控制台。哦,我不确定Object.keys代码段是否为IE8完成了工作,因为某种原因。我现在从我的一个库中删除了依赖项,因此它可以运行,但如果可以的话,我仍然希望添加支持。我想如果您提供一个小代码段来演示Object.ke失败的示例,我将能够更好地帮助您即使在代码段实现之后也是如此。我错了,当我在控制台中尝试测试它时,它似乎确实起作用。我将不得不自己进行更多的调试,但这个代码段本身没有问题。谢谢你的回答。你能澄清捕获出了什么问题吗?它似乎至少在IE9上起作用,因为我无法捕获丢失的co运行后再次进行NSLE。无论如何,Object.keys catch似乎可以完成这项工作,非常感谢。我为这些东西创建了规范化函数,这样以后我就可以很容易地处理这些东西了。你现在可以在网站上查看它们,键入“proot.normalize”到开发人员控制台。哦,我不确定Object.keys代码段是否为IE8完成了工作,因为某种原因。我现在从我的一个库中删除了依赖项,因此它可以运行,但如果可以的话,我仍然希望添加支持。我想如果您提供一个小代码段来演示Object.ke失败的示例,我将能够更好地帮助您我错了,当我试着在控制台中测试它时,它似乎确实可以工作。我将不得不自己调试它,但这段代码本身并没有问题。
if (window.console){
alert("there");
} else {
alert("not there");
}