window.external有什么用途?

21

什么是window.external的作用?它是否用于从JavaScript调用C# / VB.NET(ASP.NET)中的服务器端函数/方法?请您指点一下方向?

代码:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <input type="button" name="button1" value="Click" 
               onclick="javascript:window.external.SayHello('Mike');" />
    </div>
    </form>
</body>
</html>
Public Class WebForm1
    Inherits System.Web.UI.Page

    Public Sub SayHello(ByVal name As String)
        Response.Write("Hello :- " & name)
    End Sub
End Class
2个回答

35

这主要参考自MSDN文档,但是window.external可以用于允许您的WebBrowserControl执行客户端Windows Forms应用程序的公共方法。

例如,您的表单中可能有这样一个函数:

public void HelloFromTheForm()
{
    MessageBox.Show("Hi client, thanks for calling me!");
}

而在加载到您的 WebBrowserControl 中的 HTML 中,您可能有一个看起来像这样的按钮:

<button onclick="window.external.HelloFromTheForm()">
    Say hi to the form
</button>

关于你的问题“这是用来调用服务器端函数的吗?”,你的表单不是“服务器端的”,但它确实允许你从嵌入的网页中调用你的表单的C#/VB.NET代码。


公共类 WebForm1 继承 System.Web.UI.Page受保护的子 述语 SayHello(ByVal name As String) Response.Write("你好 :- " & name) End SubEnd Class - user1054625
1
好的,有两件事。首先,您最好修改原始帖子并添加代码,而不是强制将其放入评论中,这使得阅读非常困难 :)。其次,您的 SayHelloprotected 的。它必须是 public 的。如果这样修复了,请告诉我。 - vpiTriumph
我已经编辑了问题。现在你有我拥有的完整代码。 - user1054625
好的,我们现在讨论的是完全不同的事情。你正在处理一个 System.Web.UI.Page ,而我给你的是一个 System.Windows.Form 。你正在寻找的是如何从Web表单的客户端调用服务器端代码。请查看之前的这篇Stack Overflow文章,其中@muhammad-akhtar中间部分的帖子应该可以解决你的问题。 - vpiTriumph
1
@Volatil3,托管浏览器组件的表单(或应用程序)必须将脚本对象设置为可见的.NET类的实例。(请参阅WebBrowser.ObjectForScripting)。该类的公共方法将使用window.external可用。 - xr280xr
显示剩余2条评论

14

这是一种由某些浏览器/操作系统供应商采用的约定,旨在方便在浏览器中运行的JavaScript和在用户设备或计算机上运行的“外部”代码之间的通信。

例如,如果您已经为Android或Windows Phone编写了原生应用程序来托管Web浏览器控件,则周围的本机移动框架可能提供window.external作为Web控件内运行的JavaScript调用您应用程序本机代码功能的方式。 (如何在Android上执行此类操作的示例可在此处找到:从Java - Android监听JavaScript函数调用

另一方面,如果您希望在用户的Web浏览器上运行的JavaScript与运行在服务器上的C#代码之间进行通信,则需要研究AJAX样式的调用(这通常与window.external无关)。 设置此类事情的示例可以在ASP.Net网站上找到。 例如:http://www.asp.net/web-forms/tutorials/aspnet-ajax/understanding-asp-net-ajax-web-services


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接