簡體   English   中英

Xamarin WebView通常什么都不顯示

[英]Xamarin WebView usually shows nothing

public partial class Page : ContentPage
{
    public Page(string filename)
    {
        if(...
        {
            WebView view = new WebView
            {
                Source = "http://xamarin.com"
                //Source = "http://www.google.com"
                /*Source = new HtmlWebViewSource
                {
                    Html = @"<html><body>
                            <h1>Test Code</h1>
                            <p>The code is working.</p>
                            </body></html>"
                }*/
            };
            Content = new StackLayout()
            {
                Children =
                {
                    view
                }
            };
        }
        else ...

該頁面大部分時間顯示為空白。 在xamarin.com示例中,經過長時間的延遲,該頁面填充了我運行該頁面大約20%的時間。 Google和自定義測試根本不起作用。 自定義代碼是我要針對某些特定情況工作的內容,這些情況將更易於創建為Web代碼。

在其他情況下,我創建和添加的其他視圖組件也可以正常工作。 (按鈕,標簽等)

斷點並沒有顯示太多。 該關注列表毫無作用,無法告訴我任何事情。 通過逐步了解,我可以在各種測試用例中找到正確的代碼路徑,僅此而已。

在Xamarin Live Player(Android 6.0-API 23)的Android手機上進行了測試。 該代碼在Visual Studio 2015中。目標平台是Android和iOS。

相應的xaml頁沒有太多內容。

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Project.Views.Page"
</ContentPage>

編輯:

AndroidManifext.xml具有INTERNET權限:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.Company.Project" android:versionCode="1" android:versionName="1.0">
    <uses-sdk android:minSdkVersion="15" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application android:label="Project.Android"></application>
</manifest>

該頁面大部分時間顯示為空白。 在xamarin.com示例中,經過長時間的延遲,該頁面填充了我運行該頁面大約20%的時間。 Google和自定義測試根本不起作用。 自定義代碼是我要針對某些特定情況工作的內容,這些情況將更易於創建為Web代碼。

我已經測試過並重現了問題。 僅當您在構造函數或OnAppearing編程方式創建OnAppearing時,才會發生這種情況。 我設置了斷點,發現webview的高度不會自動擴展(始終為0)。 我的猜測是,如果您在頁面的構造函數或OnAppearing創建webview,則永遠不會根據其Web內容重新測量webview。

因此,有兩種解決方法:

  1. 在Xaml中使用webview:

     <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" ...> <WebView Source="http://xamarin.com"></WebView> </ContentPage> 
  2. 舉一個HeightRequest中的WebView OnNavigated

     protected override void OnAppearing() { base.OnAppearing(); view = new WebView(); Content = new StackLayout { Children = { view } }; view.Navigated += View_Navigated; view.Source = "http://xamarin.com"; } private void View_Navigated(object sender, WebNavigatedEventArgs e) { (sender as WebView).HeightRequest = Height; } 

更新:如果您將HtmlWebViewSource用於HtmlWebViewSource的Source。 View_Navigated不會被觸發。 因此,在這樣的circumsance,您可以設置webview.HeightRequest設置后明確webview.Source

view = new WebView();
Content = new StackLayout
{
    Children = { view }
};
view.Navigated += View_Navigated;
//view.Source.BindingContextChanged += Source_BindingContextChanged;
//view.Source.PropertyChanged += Source_PropertyChanged;
HtmlWebViewSource mSource = new HtmlWebViewSource
{
    Html = @"<html><body>
           <h1>Test Code</h1>
           <p>The code is working.</p>
           </body></html>"
};
view.Source = mSource;
view.HeightRequest = 150;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM