我不确定这是否得到支持,但想知道是否有人想出了一些创意来解决这个问题。
有没有办法从silverlight调用javascript,没有必须在aspx页面/外部js上定义任何javascript函数?
我希望能够做到这样的事情:
HtmlPage.Window.Invoke("(function () { window.lastErrorMessage = 'foo'; })();")
其中,对于放弃关于风格的讨论,我同意违反许多最佳实践规则,但我目前的目的是在我们实施现有规则之前集体讨论一些快速而肮脏的错误报告(甚至可以称之为报告?)此解决方案中以数据库为中心的错误记录。
有什么想法?这个想法是生成一些谨慎的东西,用户不会觉得被侵入或者太技术性的东西(比如IE的脚本错误对话框),但我们的应用程序支持可以从无法访问代码库等获得更多信息。
谢谢,马修
答案 0 :(得分:4)
您要查找的方法是Eval
而不是Invoke
: -
HtmlPage.Window.Eval("(function () { window.lastErrorMessage = 'foo'; })();")
答案 1 :(得分:3)
您可以使用HtmlPage.Document将您的JavaScript动态添加到托管页面DOM,然后执行添加的方法。 或者您是否尝试不修改页面?
HtmlElement head = HtmlPage.Document.GetElementsByTagName("head")[0] as HtmlElement;
HtmlDocument htmlDocument = HtmlPage.Document;
HtmlElement scriptElement = htmlDocument.CreateElement("script");
scriptElement.SetAttribute("type", @"text/javascript");
scriptElement.SetProperty("text", "function testMe(p) { alert(p); }");
head.AppendChild(scriptElement);
// Invoke like this
HtmlPage.Window.Invoke("testMe", "hello");