diff --git a/content/util.js b/content/util.js index f095a95b..6269a758 100644 --- a/content/util.js +++ b/content/util.js @@ -41,40 +41,48 @@ vimperator.util = { { var type = typeof(arg); - if (type == "number") + // some objects like window.JSON or getBrowsers()._browsers need the try/catch + try { - return "" + arg + ""; - } - else if (type == "string") - { - if (process_strings) - arg = '"' + vimperator.util.escapeHTML(arg.replace(/\n/, "\\n")) + '"'; + if (type == "number") + { + return "" + arg + ""; + } + else if (type == "string") + { + if (process_strings) + arg = '"' + vimperator.util.escapeHTML(arg.replace(/\n/, "\\n")) + '"'; - return "" + arg + ""; - } - else if (type == "boolean") - { - return "" + arg + ""; - } - else if (arg == null || arg == "undefined") - { - return "" + arg + ""; - } - else if (type == "object" || type == "function") - { - // for java packages value.toString() would crash so badly - // that we cannot even try/catch it - if (/^\[JavaPackage.*\]$/.test(arg)) - return "[JavaPackage]"; + return "" + arg + ""; + } + else if (type == "boolean") + { + return "" + arg + ""; + } + else if (arg == null || arg == "undefined") + { + return "" + arg + ""; + } + else if (type == "object" || type == "function") + { + // for java packages value.toString() would crash so badly + // that we cannot even try/catch it + if (/^\[JavaPackage.*\]$/.test(arg)) + return "[JavaPackage]"; - var str = arg.toString(); - if (typeof str == "string") // can be "undefined" - return vimperator.util.escapeHTML(str); - else - return "undefined"; + var str = arg.toString(); + if (typeof str == "string") // can be "undefined" + return vimperator.util.escapeHTML(str); + else + return "undefined"; + } + } + catch (e) + { + return "<unknown>"; } - return arg; + return "<unknown type>"; } } diff --git a/content/vimperator.js b/content/vimperator.js index cb56a4bd..b1c817b4 100644 --- a/content/vimperator.js +++ b/content/vimperator.js @@ -360,29 +360,31 @@ const vimperator = (function() //{{{ else string += obj + "::\n"; - for (var i in object) + try // window.content often does not want to be queried with "var i in object" { - var value; - try + for (var i in object) { - if (i == "JSON") // without this ugly hack, ":echo window" does not work - value = "[object JSON]"; - else + var value; + try + { value = object[i]; - } - catch (e) - { - value = ""; - } + } + catch (e) + { + value = "<no value>"; + } - if (color) - { - value = vimperator.util.colorize(value, true); - string += "" + i + ": " + value + "\n"; + if (color) + { + value = vimperator.util.colorize(value, true); + string += "" + i + ": " + value + "\n"; + } + else + string += i + ": " + value + "\n"; } - else - string += i + ": " + value + "\n"; } + catch (e) { }; + return string; },