Silverlight Javascript控制台";未能调用";IE安全问题
我有一个Silverlight 5应用程序,它使用helper类向控制台发送一些调试信息。JavascriptConsole的代码非常简单: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
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安全级别?