您可以做两件主要的事情:
- 以编程方式调用函数
- 使用 HTML 字符串注入任何代码
函数调用
你可以使用InvokeScript来调用javascript函数。
如果您在网页中有脚本:
<script lang="en-us" type="text/javascript">
function myFunction() {
alert("I am an alert box!");
}
</script>
然后就可以在C#中调用了:
MyWebview.InvokeScript("myFunction", null);
这将执行脚本函数myFunction。
注入文本
如果您下载 HTML 页面和所有其他需要的文件(使用 Windows HttpClient),您可以通过操作然后导航到字符串来注入任何代码。
假设您想更改上述脚本以添加另一个函数“HelloWorld”,那么您可以
- 在文件中搜索您知道会出现的内容,例如:
<script lang=\"en-us\" type=\"text/javascript\">
- 使用字符串操作,添加所需的文本,例如函数(但可以是任何内容)
- 导航到字符串
C# 代码:
string MyWebPageString = GetWebpageString(WebpageUri);
string ScriptTagString = "<script lang=\"en-us\" type=\"text/javascript\">";
int IndexOfScriptTag = MyWebPageString.IndexOf(ScriptTagString);
int LengthOfScriptTag = ScriptTagString.Length;
string InsertionScriptString = "function SayHelloWorld() { window.external.notify(\"Hello World!\");} ";
MyWebPageString = MyWebPageString.Insert(IndexOfScriptTag + LengthOfScriptTag + 1, InsertionScriptString);
MyWebview.NavigateToString(MyWebPageString);
结果将是导航到的网页将如下所示:
<script lang="en-us" type="text/javascript"> function SayHelloWorld() { window.external.notify("Hello World!");}
function myFunction() {
alert("I am an alert box!");
}
</script>
由于注入可以应用于任何区域,甚至是 HTML,您应该能够弄清楚一些事情。
希望这会有所帮助。祝你好运。
此答案基于this MSDN blog