[Laszlo-dev] strange error message from IE7, only in debug mode

Max Carlson max at openlaszlo.org
Mon Aug 31 11:16:18 PDT 2009


I'll look into this... I noticed something similar in webtop (only in 
IE) where a global property was being overwritten - eek!

P T Withington wrote:
> Inspecting the function reveals:
> 
> ERROR @lpp-8408.lzx#3: /view/view.setAttribute('valign', 'absmiddle'): 
> Invalid argument. Valid choices are: 'top', 'middle', or 'bottom'.
> ERROR: super.open is undefined in open
> lzx> Debug.inspect(open)
> «Function(0)#2»
> «Function(0)#2| open»
> lzx> _.toString()
> 'function open () {\nwith (this) {\n/* -*- file: lz/alert.lzx#66.13 -*- 
> */\nthis.result = null;\nif (this.onresult) {\n/* -*- file: #67 -*- 
> */\n/* -*- file: #68 -*- */\nthis.onresult.sendEvent(null)\n};\n/* -*- 
> file: #69 -*- */\n/* -*- file: #70 -*- 
> */\n(arguments.callee["$superclass"] && 
> arguments.callee.$superclass.prototype["open"] || 
> this.nextMethod(arguments.callee, "open")).call(this)\n}}'
> 
> so, somehow, window.open is getting smashed to be this method from 
> lz.alert.
> 
> My suspicion:  IE is _still_ implementing Javascript incorrectly, and 
> when you have an expression of the form:
> 
>   var foo = function foo () ...
> 
> It is defining the global foo, even though in a function expression the 
> name of the function is supposed to be ignored.  If this is true, it is 
> amazing that anything in IE works at all.
> 
> The server is supposed to be detecting when the client is IE and is 
> supposed to serve up the *-simple versions of the LFC (which omit names 
> from function expressions), and is also supposed to compile user code 
> with the function expression names elided (we include them normally 
> because the Firefox and Safari debugger will use them to make backtraces 
> more intelligible).
> 
> Please file a bug.  I have 3 theories:  bit rot, failure to detect IE in 
> the compiler path, or, the compiler is not recording the client browser 
> bit as effecting the cache and is serving up a cached version that is 
> incorrect.
> 
> On 2009-08-31, at 13:30, Henry Minsky wrote:
> 
>> In a DHTML app, *only in IE7* and *only in Debug mode*, when I click
>> right on the canvas to get the default Laszlo menu, and click on
>> "About Openlaszlo",
>>
>>
>> ERROR: super.open is undefined in open
>> lzx> Debug.inspect(super.open is undefined in open)
>> «LzError(39)#1» {
>> file: null
>> length: 39
>> line: null
>> message: 'super.open is undefined in open'
>> }
>> «LzError(39)#1| super.open is undefined in open»
>> lzx>
>>
>> I believe this is happening in this LzBrowserKernel.loadURL method
>> which tries to load a specified URL. What is weird is that this doesn't
>> happen if I turn on backtrace, it only happens in regular debug mode.
>>
>>
>> If I look at the compiled code js code, for debug mode it says this, 
>> there
>> is
>> no reference to super or our call-next-method
>>
>> Class.make("LzBrowserKernel", null, null, ["loadURL",
>> function loadURL (url_$1, target_$2, features_$3) {
>>     /* -*- file: -*- */
>>     /* -*- file: kernel/dhtml/LzBrowserKernel.lzs#24.14 -*- */
>>     switch (arguments.length) {
>>       case 1:
>>         /* -*- file: #25 -*- */
>>         target_$2 = null;;case 2:
>>         features_$3 = null
>>             };
>>     /* -*- file: #25 -*- */
>>     if (target_$2 != null) {
>>         /* -*- file: #25 -*- */
>>         /* -*- file: #26 -*- */
>>         if (features_$3 != null) {
>>             /* -*- file: #26 -*- */
>>             /* -*- file: #27 -*- */
>>             window.open(url_$1, target_$2, features_$3)
>>                 } else {
>>             /* -*- file: #28 -*- */
>>             /* -*- file: #29 -*- */
>>             window.open(url_$1, target_$2)
>>                 }} else {
>>         /* -*- file: #32 -*- */
>>         window.location = url_$1
>>             }}
>> /* -*- file:  -*- */
>> ,
>>
>> The code in LzBrowserKernel just calls window.open ...
>>
>>
>> /**
>>  * @access private
>>  */
>> class LzBrowserKernel {
>>
>> /**
>>  * Loads a URL in the browser, optionally in a target
>>  *
>>  * @param String url: URL to load
>>  * @param String target: Optionally specifies a named frame to display 
>> the
>> contents of the URL.
>>  * The document specified by URL is loaded into the current browser frame
>> by default.
>>  */
>> static function loadURL ( url, target=null, features=null ){
>>    if (target != null) {
>>        if (features != null) {
>>            window.open(url, target, features);
>>        } else {
>>            window.open(url, target);
>>        }
>>    } else {
>>        window.location = url;
>>    }
>> }
>>
>> -- 
>> Henry Minsky
>> Software Architect
>> hminsky at laszlosystems.com
> 
> 

-- 
Regards,
Max Carlson
OpenLaszlo.org



More information about the Laszlo-dev mailing list