Silverlight Javascript控制台“无法调用”IE安全问题

时间:2014-01-23 16:42:18

标签: javascript silverlight internet-explorer

我有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应用程序,我有异常“无法调用:错误”,没有提供其他信息。 enter image description here

我使用相同的IE浏览器用于本地环境而非本地环境。当我从IE开发工具控制台执行console.error('我的错误')时,它工作正常。所以它看起来像IE中的一些Silverlight Javascript Bridge安全问题。

它也适用于从Silverlight访问的窗口对象,因此代码

window.Eval("console.error('my error message')"); 

也可以正常工作

1 个答案:

答案 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.
}

希望有所帮助