2016-11-24 94 views
0

我正在使用xamarin表單開發一個跨平臺的應用程序。我創建了一個跨平臺的PCL項目。我已經在其中實施了混合Web視圖。正如我試圖加載我的html內容。我只想知道如何捕捉混合webview的導航和導航事件。我對Xamarin和原生移動開發非常陌生。Hybrid WebView導航和導航事件Xamarin表單

我想在Android,iOS,UWP,WinPhone等混合網頁視圖中獲取OnNavigating和OnNavigated事件。

MainPage.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" 
      xmlns:local="clr-namespace:Demo;assembly=Demo" 
      x:Class="Demo.MainPage" 
      Title="Dashboard"> 
    <ContentPage.Content> 
    <local:HybridWebView x:Name="hybridWebView" Uri="local.html" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" /> 
    </ContentPage.Content> 
</ContentPage> 

MainPage.xaml.cs中

public UserDashboard() 
     { 
      InitializeComponent(); 
     } 

爲Android

HybridwebViewRendered.cs
[assembly: ExportRenderer(typeof(HybridWebView), typeof(HybridWebViewRenderer))] 
namespace FISE.Droid 
{ 
    public class HybridWebViewRenderer : ViewRenderer<HybridWebView, Android.Webkit.WebView> 
    { 
     const string JavaScriptFunction = "function invokeCSharpAction(data){jsBridge.invokeAction(data);}"; 

     protected override void OnElementChanged(ElementChangedEventArgs<HybridWebView> e) 
     { 
      base.OnElementChanged(e); 
      Android.Webkit.WebView.SetWebContentsDebuggingEnabled(true); 

      if (Control == null) 
      { 
       var webView = new Android.Webkit.WebView(Forms.Context); 
       webView.Settings.JavaScriptEnabled = true; 
       webView.Settings.DomStorageEnabled = true; 
       Android.Webkit.WebView.SetWebContentsDebuggingEnabled(true); 
       webView.SetWebChromeClient(new WebChromeClient()); 
       webView.SetWebViewClient(new WebViewClient()); 
       SetNativeControl(webView); 
      } 
      if (e.OldElement != null) 
      { 
       Control.RemoveJavascriptInterface("jsBridge"); 
       var hybridWebView = e.OldElement as HybridWebView; 
       hybridWebView.Cleanup(); 
      } 
      if (e.NewElement != null) 
      { 
       Control.AddJavascriptInterface(new JSBridge(this), "jsBridge"); 
       Control.LoadUrl(string.Format("file:///android_asset/Content/{0}", Element.Uri)); 
       InjectJS(JavaScriptFunction); 
      } 
     } 

     void InjectJS(string script) 
     { 
      if (Control != null) 
      { 
       Control.LoadUrl(string.Format("javascript: {0}", script)); 
      } 
     } 

    } 
} 

而且我無法調試混合的WebView在我的HTML頁面。我該怎麼做? 我的混合webview的高度未設置爲100%。 web視圖內的html頁面忽略高度:100%屬性。如何設置混合webview的高度來適應屏幕大小?

回答

0

我認爲你需要使用一個stackLayout啊,你喜歡用保證金達到100%,屏幕尺寸任何佈局,填充和Spacion設置爲0

<ContentPage.Content> 
    <StackLayout Orientation="Vertical" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Margin="0" Padding="0" Spacing="0"> 
     <local:HybridWebView x:Name="hybridWebView" Uri="local.html" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" /> 
    </StackLayout> 
</ContentPage.Content> 

我很抱歉,但我認爲你可以不要調試Html,因爲Html不是一種可以像C#一樣調試的編程語言。你想要調試Html的功能是什麼?

0

不知道你仍然需要幫助,但這裏是答案的一部分:

爲了「調試Xamarin網頁視圖」爲Android您的PC或上運行模擬器和ADB連接USB連接到一個真實的設備,然後運行Chrome瀏覽器並按照指示在這裏:

https://developers.google.com/web/tools/chrome-devtools/remote-debugging/

對於IOS 11+,你需要獲得最新的Safari瀏覽器的Mac位(Safari瀏覽器技術預覽),我覺得有一些線索到這裏設置: http://asciiwwdc.com/2016/sessions/420