我如何通过webview注入javascript代码

本文关键字:javascript 代码 注入 webview 何通过 | 更新日期: 2023-09-27 18:03:58

基本上我想做的是这个这个,但我似乎找不到类似的webview XAML控件。我最终需要做的是捕获来自webview的传入json文件。就像这样,我从服务器得到一个糟糕的请求,从webview得到不支持的文件异常。我想注入一个javascript,这样它就会提醒我,我可以得到传入json的正文,绕过所有的错误。

我如何通过webview注入javascript代码

你可以做两件事:

  1. 可编程调用函数
  2. 使用HTML字符串
  3. 注入任何代码

函数调用

可以使用InvokeScript调用javascript函数

如果你在网页中有一个脚本:

<script lang="en-us" type="text/javascript">
   function myFunction() {
       alert("I am an alert box!");
   }
</script>
然后你可以在c#中调用:
MyWebview.InvokeScript("myFunction", null);

将执行脚本函数myFunction

<<h3>注射文本/h3>

如果你下载了HTML页面和所有其他需要的文件(使用Windows HttpClient),你可以通过操作注入任何代码,然后导航到字符串

假设您想更改上述脚本以添加另一个函数"HelloWorld",那么您可以

  1. 在文件中搜索你知道会出现的内容,例如:<script lang='"en-us'" type='"text/javascript'">
  2. 使用字符串操作,添加所需的文本,例如函数(但这可以是任何东西)
  3. 导航到字符串
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,因此您应该能够找出一些东西。

希望这对你有帮助。好运。

这个答案是基于这个MSDN博客