尝试在Chrome中捕获语法错误

时间:2012-11-07 16:06:12

标签: javascript function google-chrome

我正在尝试使用其他人的JavaScript文件解决问题,并且他们声明了如下函数。

function window.confirm(str) {
..... code here .....
}

这适用于IE,但在谷歌浏览器中,它会在window.confirm中的句点上引发未被删除的语法错误。我尝试像下面一样尝试捕获它,但是这不起作用,语法错误相同。然后它不允许我使用该JavaScript文件中定义的任何函数。

try {
    var window.confirm = function(str) {
        ..... code here .....
    };
}
catch(e) {}

我还试图将声明更改为变量,如下所示,但这也不起作用。同样的错误。

var window.confirm = function(str) {
    ..... code here .....
};

有没有办法在Chrome中捕获这个?

4 个答案:

答案 0 :(得分:3)

两点:

  • try/catch用于检测执行错误,而不是编译错误。不要部署语法错误的代码。

  • function window.confirm(){是您必须避免的MS惯用语。您可以使用window.confirm = function() {,或者,如果您位于全球范围内,则只需使用var confirm = function() {

答案 1 :(得分:3)

function window.confirm(str)var window.confirm ...无效。相反,试试:

window.confirm = function(str){
..... code here .....
}

答案 2 :(得分:2)

如果你绝对需要尝试捕捉" Uncaught SyntaxError"错误,那么你将不得不依赖JavaScript隐藏在地板下的误解的继父eval()功能。

在下面的示例代码中,obj仅在传入字符串求值为有效对象时才会更新;否则obj将默认为{}。让我们假设$someTextField拉入在CMS textarea字段中输入的设置,内容编辑器在字段中输入了这个格式错误的字符串:

{
  "foo": "bar
}

示例代码:

var oSettings = {};

// Returns "Uncaught SyntaxError: Unexpected token ILLEGAL(…)"
try {
  oSettings = <?php echo $someTextField ?>;
} catch(e) {}

// This works
try {
  eval('oSettings = <?php echo $someTextField ?>');
} catch(e) {}

请记住,如果要评估的字符串来自某个外部源(例如CMS),并且您无法控制它,如本例所示,那么您需要做三件事:

  1. 检测并阻止执行可能会破坏您应用的地狱的JavaScript代码。

  2. 转义传入字符串中的引号以避免与JavaScript引号冲突。由于我们在此示例中使用PHP,因此最好执行以下操作:

    eval('oSettings = <?php echo addslashes($someTextField) ?>');

  3. 删除换行符,因为评估的字符串需要在一行上。做这样的事情会更好:

    eval('oSettings = <?php echo addslashes(str_replace(array("\r\n", "\n", "\r"), "", $someTextField)) ?>');

答案 3 :(得分:1)

您必须修复语法错误。 Try / catch不会捕获语法错误,因为语法错误是编译时错误,而try / catch只能捕获运行时错误。