代码之家  ›  专栏  ›  技术社区  ›  Ryan

从Silverlight调用Javascript函数

  •  7
  • Ryan  · 技术社区  · 17 年前

    HtmlPage.Window.Invoke("showPopup", new string[] { "http://www.example.com" });

    HtmlPage.Window.Invoke("alert", new string[]{"test"});

    我还可以在IE开发者工具中打开有问题的页面,并手动调用 showPopup("http://www.example.com") 它按预期工作。

    因此,js函数可以工作,Silverlight二进制文件可以找到其他js函数。我在这里错过了什么?

    附加说明:

    • 函数调用位于按钮点击事件处理程序中,因此它发生在页面(和脚本)加载后)
    6 回复  |  直到 17 年前
        1
  •  2
  •   Ryan    17 年前

    啊哈!我想通了。我们的应用程序使用iframe,因此渲染的html看起来像这样

    <html>
    <head></head>
    <body>
    Stuff
    <iframe>
        <html>
            <head></head>
            <body>Other Stuff</body>
        </html>
    </iframe>
    <body>
    </html>
    

    showPopup <head> (为什么我可以用IE工具栏调用该函数),但不能调用内部 < < 解决了问题。

        2
  •  2
  •   Oli    17 年前

    实际上,从iframe再次引用脚本并不是引用父级中包含的代码的最有效方法。如果你的函数名为“showPopup”,你可以在iframe中插入以下内容:

    <script type="text/javascript">
        var showPopup = parent.showPopup;
    </script>
    

        3
  •  2
  •   Glorfindel Doug L.    7 年前

    showPopup javascript函数是否与Silverlight控件位于同一html或aspx页面上?如果javascript函数不存在,您通常会收到“调用失败…”错误:

    HtmlPage.Window.Invoke("functionThatDoesNotExist", new [] { "Testing" });
    

    alt text

    当你遇到这个问题时,你使用的是什么浏览器?

    您是否在任何地方使用ScriptableType地址?

    是否可以列出导致您的计算机上发生此问题的简短但完整的程序的代码。..

        4
  •  0
  •   Andreas Grech    17 年前

    在尝试从脚本中调用函数之前,请确保脚本已完全加载。

        5
  •  0
  •   Neo42    16 年前

    我是这样做的。但我是在没有视觉工作室的情况下创作银光。我只有原始的html、xaml和js(javascript)。请注意MouseLeftButton Up及其值“LandOnSpace”

            <Canvas x:Name="btnLandOnSpace" Background="LightGreen" MouseLeftButtonUp="LandOnSpace"
                Cursor="Hand" Canvas.Top ="0"  Width="70" Height="50"> 
                <TextBlock Text="LandOnSpace"  />
                </Canvas>
    

    function LandOnSpace(sender, e) {  //on server
    if (!ShipAnimateActive && !blnWaitingOnServer) {
        blnWaitingOnServer = true;
        RunServerFunction("/sqgame/getJSLLandOnSpace");
            ShowWaitingBox();
            };
    else {
        alert('Waiting on server.');
    };
    

    }

        6
  •  0
  •   Harish    15 年前