Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight Javascript控制台";未能调用";IE安全问题_Javascript_Silverlight_Internet Explorer - Fatal编程技术网

Silverlight Javascript控制台";未能调用";IE安全问题

Silverlight Javascript控制台";未能调用";IE安全问题,javascript,silverlight,internet-explorer,Javascript,Silverlight,Internet Explorer,我有一个Silverlight 5应用程序,它使用helper类向控制台发送一些调试信息。JavascriptConsole的代码非常简单: public class JavascriptConsole { static HtmlWindow window = HtmlPage.Window; static ScriptObject console = HtmlPage.Window.Eval("console") as ScriptObject; public stat

我有一个Silverlight 5应用程序,它使用helper类向控制台发送一些调试信息。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上正常工作。在我的本地主机环境中,它也可以在IE上正常工作。但是,如果我在IE中的任何其他环境(本地环境除外)上执行此SL应用程序,则会出现异常“调用失败:错误”,没有提供其他信息。

我对本地和非本地环境使用相同的IE浏览器。当我从IE开发工具控制台执行console.error(“我的错误”)时,它工作正常。因此,它看起来像是IE中的SilverlightJavaScript桥安全问题

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

window.Eval("console.error('my error message')"); 
效果也很好

不要使用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.
}

希望这有帮助

这并不简单-我将不得不更改托管页面的JS。如果您没有自己的托管页面,这可能是唯一的问题。如果是这样的话,我同意顺便说一句:我刚刚试着运行像你们这样的样本。所以我工作得很好。但请注意,我有Win8.1+IE11。也许像Silverlight这样的插件的互联网设置有问题。无论如何我相信上面发布的解决方案适用于任何情况。正如我所提到的,我的示例在本地环境下运行良好。仅当您将其部署到其他服务器并访问机器浏览器上的客户端时,它才起作用。请参阅。你玩过设置吗?Silverlight需要在trusted中运行,尝试并调整Interenet安全级别?