我有Silverlight 5应用程序,它使用帮助程序类向控制台发送一些调试信息。 JavascriptConsole的代码非常简单:
public class JavascriptConsole
{
static HtmlWindow window = HtmlPage.Window;
static ScriptObject console = HtmlPage.Window.Eval("console") as ScriptObject;
public static bool IsConsoleAvailable()
{
return !(bool)window.Eval("typeof(console) == 'undefined' || typeof(console.log) == 'undefined'");
}
public static void Error(params object[] parameters)
{
if (!IsConsoleAvailable()) return;
console.Invoke("error", args: parameters);
}
}
此代码适用于任何环境中的Google Chrome。它也适用于我的localhost环境中的IE。但是,如果我在IE上的任何其他环境(我的本地除外)上执行此SL应用程序,我有异常“无法调用:错误”,没有提供其他信息。
我使用相同的IE浏览器用于本地环境而非本地环境。当我从IE开发工具控制台执行console.error('我的错误')时,它工作正常。所以它看起来像IE中的一些Silverlight Javascript Bridge安全问题。
它也适用于从Silverlight访问的窗口对象,因此代码
window.Eval("console.error('my error message')");
也可以正常工作
答案 0 :(得分:0)
不要使用eval。 重构代码是有意义的:
代替
中的大量代码public class JavascriptConsole
做简单的方法
Silverght:
private void SomeMethod()
{
HtmlPage.Window.Invoke("log", data);
}
JavaScript:所以Javascript可以放在内联(不好)或页面上的脚本链接。
function log(data) {
// verify that console exists and log whatever needed.
}
希望有所帮助