gpt4 book ai didi

c# - 如何调用脚本在 msHTML 中工作

转载 作者:行者123 更新时间:2023-11-30 20:59:53 28 4
gpt4 key购买 nike

我正在使用 axWebBrowser,我需要制作一个脚本,该脚本在列表框的选定项目发生更改时起作用。

在默认的 webBrowser 控件中,有一个类似的方法;

WebBrowserEx1.Document.InvokeScript("script")

但是在 axWebBrowser 中我无法运行任何脚本!并且没有关于此控件的文档。

有人知道吗?

最佳答案

一个迟到的答案,但希望仍然可以帮助别人。使用 WebBrowser ActiveX 控件时,有多种调用脚本的方法。同样的技术也可以用于 WinForms 版本的 WebBrowser 控件(通过 webBrowser.HtmlDocument.DomDocument )和 WPF 版本(通过 webBrowser.Document ):

void CallScript(SHDocVw.WebBrowser axWebBrowser)
{
//
// Using C# dynamics, which maps to COM's IDispatch::GetIDsOfNames,
// IDispatch::Invoke
//

dynamic htmlDocument = axWebBrowser.Document;
dynamic htmlWindow = htmlDocument.parentWindow;
// make sure the web page has at least one <script> tag for eval to work
htmlDocument.body.appendChild(htmlDocument.createElement("script"));

// can call any DOM window method
htmlWindow.alert("hello from web page!");

// call a global JavaScript function, e.g.:
// <script>function TestFunc(arg) { alert(arg); }</script>
htmlWindow.TestFunc("Hello again!");

// call any JavaScript via "eval"
var result = (bool)htmlWindow.eval("(function() { return confirm('Continue?'); })()");
MessageBox.Show(result.ToString());

//
// Using .NET reflection:
//

object htmlWindowObject = GetProperty(axWebBrowser.Document, "parentWindow");

// call a global JavaScript function
InvokeScript(htmlWindowObject, "TestFunc", "Hello again!");

// call any JavaScript via "eval"
result = (bool)InvokeScript(htmlWindowObject, "eval", "(function() { return confirm('Continue?'); })()");
MessageBox.Show(result.ToString());
}

static object GetProperty(object callee, string property)
{
return callee.GetType().InvokeMember(property,
BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.Public,
null, callee, new Object[] { });
}

static object InvokeScript(object callee, string method, params object[] args)
{
return callee.GetType().InvokeMember(method,
BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public,
null, callee, args);
}

必须至少有一个 <script> JavaScript 的 eval 标签工作,可以如上所示注入(inject)。

或者,可以使用 webBrowser.Document.InvokeScript("setTimer", new[] { "window.external.notifyScript()", "1" }) 之类的东西异步初始化 JavaScript 引擎。或 webBrowser.Navigate("javascript:(window.external.notifyScript(), void(0))") .

关于c# - 如何调用脚本在 msHTML 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15273311/

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