我只能在UWP Win 10之前找到旧的过时答案。我知道如何用旧方法做到这一点,但它给了我一些问题。
到目前为止我所看到的是,请注意问题似乎在VB中,它不是通过标记名称命令来执行元素,就像我已经告诉它应该的那样。将其更改为内部HTML,它将使用整页填充html变量。所以我似乎无法自己获得链接。
任何帮助表示赞赏!谢谢!
XAML
<Page
x:Class="webviewMessingAround.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:webviewMessingAround"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<WebView x:Name="webview" Source="http://regsho.finra.org/regsho-December.html" DOMContentLoaded="WebView_DOMContentLoaded" />
<Button x:Name="button" HorizontalAlignment="Left" Margin="145,549,0,0" VerticalAlignment="Top">
<Button x:Name="button1" Click="button_Click" Content="Button" Height="58" Width="141"/>
</Button>
</Grid>
</Grid>
</Page>
VB代码
Private Async Sub webview_DOMContentLoaded(sender As WebView, args As WebViewDOMContentLoadedEventArgs) Handles webview.DOMContentLoaded
Dim html = Await webview.InvokeScriptAsync("eval", ({"document.getElementsByTagName('a');"}))
'Debug.WriteLine(html)
End Sub
答案 0 :(得分:2)
InvokeScriptAsync
只能返回脚本调用的字符串结果。
返回值
当此方法返回时,脚本调用的字符串结果。
因此,如果您希望从网页获取链接,则需要将所有链接放入字符串中以便返回。对于C#示例:
string html = await webview.InvokeScriptAsync("eval", new string[] { "[].map.call(document.getElementsByTagName('a'), function(node){ return node.href; }).join('||');" });
System.Diagnostics.Debug.WriteLine(html);
我在这里使用
[].map.call(document.getElementsByTagName('a'), function(node){ return node.href; }).join('||');
将所有链接放入字符串中。您可能需要更改此JavaScript代码以实现自己的代码。
在此之后,您可以将字符串拆分为如下数组:
var links = html.Split(new[] { "||" }, StringSplitOptions.RemoveEmptyEntries);
虽然我以C#为例,但VB代码应该类似。