gpt4 book ai didi

javascript - 如何从该方法内部识别为 window.external.method 调用的 Web 浏览器控件实例?

转载 作者:行者123 更新时间:2023-11-30 19:47:33 29 4
gpt4 key购买 nike

我可以请你帮忙吗?

我在表单上有一组网络浏览器控件。所有网络浏览器都设置为 webBrowser.ObjectForScripting = this;因此所有脚本调用都在表单的代码中进行管理。

在我说的代码中:

public void Method1(string title)
{
WebBrowser wb = (WebBrowser)some-object;
MessageBox.Show(title + wb.Url.ToString());
}

如果通过 JavaScript 从 Web 浏览器控件之一调用此方法,如何获取调用此方法的 Web 浏览器实例(某些对象):

<script>
window.external.Method1('Hello');
</script>

谢谢!!

最佳答案

我看到了一些常见的选项:

  1. 通常,调用者有责任向被调用者介绍自己。
  2. 当只有一个调用者可以调用时,被调用者知道它是调用者。

示例 1 - 调用者 self 介绍

[ComVisible(true)]
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
var txt =
@"<html>" +
@"<body>" +
@"<a href=""#"" " +
@"onclick=""window.external.Method1(this, 'Hello');"">" +
@"Click here.</a>" +
@"</body>" +
@"</html>";
webBrowser1.ObjectForScripting = this;
webBrowser2.ObjectForScripting = this;
webBrowser1.DocumentText = txt;
webBrowser2.DocumentText = txt;
webBrowser1.Document.Window.Name = webBrowser1.Name;
webBrowser2.Document.Window.Name = webBrowser2.Name;
}
public void Method1(object sender, string s)
{
//sender is the anchor element
dynamic window = ((dynamic)((dynamic)sender).document).defaultView;
var windowName = window.Name;
var control = this.Controls.Find(windowName, true);
MessageBox.Show(s);
}
}

示例 2 - 被调用者认识调用者

private void Form1_Load(object sender, EventArgs e)
{
var txt =
@"<html>" +
@"<body>" +
@"<a href=""#"" " +
@"onclick=""window.external.Method1('Hello');"">" +
@"Click here.</a>" +
@"</body>" +
@"</html>";
webBrowser1.ObjectForScripting = new ScriptingObject(webBrowser1);
webBrowser2.ObjectForScripting = new ScriptingObject(webBrowser2);
webBrowser1.DocumentText = txt;
webBrowser2.DocumentText = txt;
}
[ComVisible(true)]
public class ScriptingObject
{
WebBrowser webBrowser;
public ScriptingObject(WebBrowser w)
{
webBrowser = w;
}
public void Method1( string s)
{
//This class knows which `WebBrowser` control calls its methods.
MessageBox.Show(s);
}
}

关于javascript - 如何从该方法内部识别为 window.external.method 调用的 Web 浏览器控件实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54812105/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com