ошибка броска eval с try / catch - PullRequest
1 голос
/ 29 ноября 2011

У меня есть эфирное приложение, в котором пользователь вводит javascript в текстовую область, и оно eval'd в компоненте mx: HTML, но даже с try / catch вокруг eval и вокруг кода в eval, и обработчик HTMLUncaughtScriptExceptionEvent, он по-прежнему выдает ошибку. htmlWindow - это html.htmlLoader.window .

try { htmlWindow.eval("try {" + script.text + "} catch (error:Error) { trace(error) }); } catch (error:Error) { trace(error) }

Ошибки приложения в этой строке, как только я ввожу текст в script, с

ReferenceError: Can't find variable: d
    at Main/reloadHTML()[C:\Users\Christian\Adobe Flash Builder 4.5\JavaScript plus Scratch\src\Main.mxml:264]
    at Main/__script_change()[C:\Users\Christian\Adobe Flash Builder 4.5\JavaScript plus Scratch\src\Main.mxml:324]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at mx.core::UIComponent/dispatchEvent()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\core\UIComponent.as:13128]
    at spark.components.supportClasses::SkinnableTextBase/textDisplay_changeHandler()[E:\dev\4.5.1\frameworks\projects\spark\src\spark\components\supportClasses\SkinnableTextBase.as:2265]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at mx.core::UIComponent/dispatchEvent()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\core\UIComponent.as:13128]
    at spark.components::RichEditableText/textContainerManager_flowOperationCompleteHandler()[E:\dev\4.5.1\frameworks\projects\spark\src\spark\components\RichEditableText.as:4808]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at flashx.textLayout.container::TextContainerManager/dispatchEvent()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\container\TextContainerManager.as:1553]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at flashx.textLayout.elements::TextFlow/dispatchEvent()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\elements\TextFlow.as:859]
    at flashx.textLayout.edit::EditManager/finalizeDo()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\edit\EditManager.as:669]
    at flashx.textLayout.edit::EditManager/doOperation()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\edit\EditManager.as:613]
    at flashx.textLayout.edit::EditManager/flushPendingOperations()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\edit\EditManager.as:873]
    at flashx.textLayout.edit::SelectionManager/enterFrameHandler()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\edit\SelectionManager.as:1859]`

Есть ли способ остановить ошибку? Я пробовал script.change="html.htmlText = '<script>' + script.text + '</script'>", но у меня есть htmlWindow.log = log; htmlWindow.rotateSprite = rotateSprite;, и если я копирую-вставляю log('test') перед его изменением, он работает, если я изменяю его до или после, он никогда не работает снова, поэтому я надеюсь получить этот eval работает.

1 Ответ

0 голосов
/ 29 ноября 2011

Я не уверен, что вы можете получить этот код на 100% бесплатно. Пользователь может написать совершенно недопустимый код, такой как zlçrza ;à"çé°$, который не будет генерировать исключение, а просто завершит работу компилятора JS. Не могли бы вы объяснить, почему вы позволяете пользователям вводить код javascript напрямую? Возможно, вам нужно подойти к этой проблеме как-то иначе?

...