2016-10-11 5 views
0

Ich versuche, eine Seite meiner Webapp zu rendern.PhantomJS ReferenceError für enthaltene Funktion

Wie Sie sehen können, schließe ich jQuery und eine beigefügte Javascript-Datei ein, die alle meine Bibliotheken und benutzerdefinierten Skripte enthält. Es wird in einer einzigen Datei zusammengefügt, um sicherzustellen, dass die abhängigen Bibliotheken bereit sind, wenn der benutzerdefinierte Code eingesetzt wird. Vielleicht nicht hübsch oder ideal, aber das ist hier nicht das Problem.

Das Problem ist der Skriptblock, wo ich load_gantt() aufrufen. Die Funktion wird am Ende des include.js definiert (nach allen Libs) wie folgt aus:

load_gantt = function(some, values){ /* CODE HERE */ }; 

load_gantt() führt die eigentliche Rendering div.container und ist ziemlich wichtig. Wenn ich versuche, diese Datei mit PhantomJS jetzt zu machen, bekomme ich diesen Fehler:

ReferenceError: Can't find variable: load_gantt 

Ich habe auch versucht das Script-Block-zu entfernen und PhantomJS der evaluate-Funktion auszuführen load_gantt() verwenden, aber es ergibt sich der gleiche Fehler . Es scheint, dass der Umfang der acutal HTML-Seite sich vom Umfang der enthaltenen js-Dateien unterscheidet. Das seltsame Ding ist jedoch, dass phantomjs nicht über den jQuery Teil des Skriptblocks klagt, obwohl die jquery lib genauso enthalten ist ...

Code funktioniert übrigens perfekt in jedem Browser. Keine Probleme oder Fehler ...

Edit: Einige kleinere Syntaxfehler

+1

Ist Ihre 'load_gantt'-Variable eine globale Variable ?. Oder befindet es sich unter einem Funktionsumfang in Ihrem 'includes.js'? –

+0

Es ist global. Wie gesagt, der Code funktioniert im Browser einwandfrei. Ich habe versucht, es mit 'window.load_gantt = function ..' an' window' anzuhängen, aber das gab mir einen weiteren Fehler. 'TypeError: undefined ist kein Konstruktor (evaluiert 'window.load_gantt (...)' '- Edit: Ich habe versucht, die gantt lib (es ist ein DHTMLX Gantt Chart) auch an 'window' zu binden, aber der Fehler bleibt bestehen. – Max

+0

@Max Welche PhantomJS Version benutzt du? Bitte registriere dich bei' onConsoleMessage', 'onError',' onResourceError', 'onResourceTimeout' Ereignisse ([Beispiel] (https://gist.github.com/artjomb/4cf43d16ce50d8674fdf#file-1_phantomerrors-js)). Möglicherweise gibt es Fehler. –

Antwort

0

Dies ist nicht wirklich eine Antwort, aber eine Ausbesserung .. ich registriert die onConsoleMessage, onError, onResourceError und onResourceTimeout Ereignisse und bemerkte, und Fehler, die angezeigt dass die Funktion nicht richtig initialisiert wurde.

I verwendet

load_gantt = function(a = 'default_a', b = 'default_b'){ /* ... */}; 

aber PhantomJS wird nicht zusammen mit diesem ... es ohne die Standardwerte sein muss. Ich weiß nicht warum, aber es funktioniert jetzt.

load_gantt = function(a, b){ /* ... */}; 
Verwandte Themen