【问题标题】:Call JavaScript from Silverlight hosted in IFrame从托管在 IFrame 中的 Silverlight 调用 JavaScript
【发布时间】:2011-12-19 13:10:24
【问题描述】:

我正在开发一个将托管在另一个应用程序 IFrame 中的 Silverlight 应用程序:

<hgroup class="title">
<h1>@ViewBag.Title.</h1>
<h2>@ViewBag.Message</h2>
</hgroup>
<script type="text/javascript">
    function testMethod() {
        alert(1);
    }       
</script>
<iframe src="URL of the silverlight application" width="750" height="500"/>

这只是一个用于测试目的的虚拟应用程序(我使用的是默认的 MVC 4 模板 - 这实际上是 Contacts.cshtml 文件)

这是我调用 JavaScript 函数的部分。

HtmlPage.Window.Invoke("testMethod");

有什么建议/我做错了什么?

【问题讨论】:

  • 您是否在 javascript 控制台中遇到任何错误?您是否启用了 HTMLBridge:msdn.microsoft.com/en-us/library/cc645023(v=vs.95).aspx
  • 是的,我做了(现在)但仍然一无所获......我对网络开发很陌生,所以不能那么精确:/两者都托管在 localhost atm(localhost/MvcApplication1 和 localhost/SilvelrightApp )
  • 所以你确实设置了enableHtmlAccess 参数?
  • 刚刚看到原始应用程序还有一个testMethod,它是空的,所以这就是为什么一开始没有调用它...现在我得到一个异常,即未定义 testMethod ...

标签: c# javascript silverlight iframe


【解决方案1】:

试试:-

ScriptObject parent = HtmlPage.Window.GetProperty("parent") as ScriptObject;
if (parent != null)
{
     parent.Invoke("testMethod");
}

【讨论】:

  • 我第一次测试它时遇到了一个错误,但现在它似乎可以工作了......也许我拼错了一些东西......对此感到抱歉......感谢您的解决方案:)
  • @AnthonyWJones 这是一个跨浏览器解决方案吗?
  • @Dmitry:是的,这种方法适用于 Silverlight 支持的任何浏览器。
【解决方案2】:

在这种情况下,这对我有用

HtmlPage.Window.Eval("if(typeof window.parent.testMethod== 'function'){window.parent.testMethod()};");

我知道应该避免使用.Eval,但它看起来对我来说是唯一的方法:/

【讨论】:

  • 解决您为什么需要求助于.Eval 是否合适?基于上述,我的回答也应该有效。因此,仍有一些事情需要理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 2013-10-19
  • 2016-06-06
相关资源
最近更新 更多