2015-12-09 3 views
0

Я пытаюсь создать универсальное rss-приложение для Windows 10, которое может загрузить содержимое страницы полной статьи для автономной консультации.Загрузить содержимое WebView в приложении WInRT

Так, проведя много времени на StackOverflow я нашел код:

HttpClientHandler handler = new HttpClientHandler { UseDefaultCredentials = true, AllowAutoRedirect = true }; 
HttpClient client = new HttpClient(handler); 
HttpResponseMessage response = await client.GetAsync(ni.Url); 
response.EnsureSuccessStatusCode(); 
string html = await response.Content.ReadAsStringAsync(); 

Однако это решение не работает на некоторых веб-странице, где содержание динамически называется.

Таким образом, альтернатива, которая остается, по-видимому, такова: загрузите веб-страницу в элемент управления WebView WinRT и каким-то образом скопируйте и вставьте визуализированный текст. НО, Webview не реализует какой-либо метод копирования/вставки или аналогичный, поэтому нет никакого способа сделать это легко.

И, наконец, я нашел это сообщение в stackoverflow (Copying the content from a WebView under WinRT), которое, похоже, имеет дело с той же самой точной проблемой, что и моя, со следующим решением;

Используйте метод InvokeScript из веб-обозревателя для копирования и вставки содержимого с помощью функции javascript.

В нем говорится: «Во-первых, эта функция javascript должна существовать в HTML, загруженном в веб-просмотр».

function select_body() { 
var range = document.body.createTextRange(); 
range.select(); 
} 

, а затем «использовать следующий код:»

// call the select_body function to select the body of our document 
MyWebView.InvokeScript("select_body", null); 

// capture a DataPackage object 
DataPackage p = await MyWebView.CaptureSelectedContentToDataPackageAsync(); 

// extract the RTF content from the DataPackage 
string RTF = await p.GetView().GetRtfAsync(); 

// SetText of the RichEditBox to our RTF string 
MyRichEditBox.Document.SetText(Windows.UI.Text.TextSetOptions.FormatRtf, RTF); 

Но это не говорит , как вводить яваскрипт функции, если она не существует на странице я нахожусь Погрузка?

ответ

1

Если у вас есть WebView так:

<WebView Source="http://kiewic.com" LoadCompleted="WebView_LoadCompleted"></WebView> 

Использование InvokeScriptAsync в сочетании с eval(), чтобы получить содержание документа:

private async void WebView_LoadCompleted(object sender, NavigationEventArgs e) 
{ 
    WebView webView = sender as WebView; 
    string html = await webView.InvokeScriptAsync(
     "eval", 
     new string[] { "document.documentElement.outerHTML;" }); 

    // TODO: Do something with the html ... 
    System.Diagnostics.Debug.WriteLine(html); 
} 
+0

Спасибо, это то, что я искал! Однако: на некоторых веб-сайтах он не принесет мне рендеринг веб-страницы, а только некоторый код html/javascript, который не содержит текст, который я хочу отобразить. Я пытаюсь создать rss-читатель новостей, который может сохранить полную статью для автономного просмотра. Поэтому единственным вариантом, который работал, было использование eval в документе document.documentElement.outerText, а не в документе document.documentElement.outerHTML. К сожалению, это приносит мне много бесполезного текста из меню, комментариев и т. Д. ... – Marc

Смежные вопросы