如何从xamarin表单中的自定义呈现程序获取回调

如何从xamarin表单中的自定义呈现程序获取回调,xamarin,xamarin.forms,xamarin.android,Xamarin,Xamarin.forms,Xamarin.android,我有一个用于android和ios的自定义混合WebView来加载URL。我需要的是在URL完成加载后向内容页传递回调。代码如下,如有帮助,将不胜感激 内容页 公共部分类物业转易申请页:ContentPage { 仪表板视图模型视图模型; StorageService存储=新的StorageService; 公共物业转易 { 初始化组件; GetUserAvatar; } 出现受保护的异步重写无效 { //我需要在这里执行回调 customView.weblink=viewmodel.Bro

我有一个用于android和ios的自定义混合WebView来加载URL。我需要的是在URL完成加载后向内容页传递回调。代码如下,如有帮助,将不胜感激

内容页

公共部分类物业转易申请页:ContentPage { 仪表板视图模型视图模型; StorageService存储=新的StorageService; 公共物业转易 { 初始化组件; GetUserAvatar; } 出现受保护的异步重写无效 { //我需要在这里执行回调 customView.weblink=viewmodel.BrokerData.config.conductioning.listing_webview; } } Android HybridView

[程序集:ExportRenderTypeOfChyBridWebView,TypeOfChyBridWebViewRenderAndroid] 命名空间HashChing.Droid.CustomRenders { 公共类HchybridWebViewRenderAndroid:ViewRenderer { 语境(Context)语境;; 公共HcHybridWebViewRenderAndroidContext上下文:basecontext { _上下文=上下文; } 受保护的覆盖无效OnElementChangedElementChangedEventArgs e { base.OnElementChangede; 常量字符串JavascriptFunction=函数invokeCharpActionData{jsBridge.invokeActiondata;}; 如果控件==null { //做点什么 如果e.NewElement!=null { //加载URL Control.addJavaScriptInterfaceNewJSBridgeThis,jsBridge; var hybridWebView=e.NewElement作为HCHybridWebview; 如果hybridWebView!=null { hybridWebView.RefreshView+=LoadUrl; } } 加载URL

public void LoadUrlobject发送方,事件参数e { Control.LoadUrlwebView.weblink,标题; } 加载URL后,它将导航到同一类中的此方法,在OnPageFinished方法中加载完成后,我希望在此处向我的内容页传递回调。非常感谢您的帮助

公共类JavascriptWebViewClient:WebViewClient { 字符串javascript; 公共JavascriptWebViewClientstring javascript { _javascript=javascript; } public override void OnPageFinishedAndroid.Webkit.WebView视图,字符串url { base.OnPageFinishedview,url; view.EvaluateJavascript_javascript,null; } } 您可以使用MessagingCenter发送和获取回调:

在ContentPage中,例如Page1.xaml.cs


更多信息:

在customrender中创建自己的事件LoadCompleted,并在加载完成后从自定义类调用它

在JavascriptWebViewClient类中,您可以订阅该事件,并在该时间执行任何您想执行的操作

如果您需要:


这个JavascriptWebViewClient类写在哪里?它是做什么的?它是到本机层的一个桥它能工作吗?因为我使用自定义呈现,我不能在我的OnPageFinished方法中访问Page1它是一个对象,不必是page,你也可以使用string或其他
public Page1 ()
    {
        InitializeComponent ();
        //here you could get the callback,and arg = "this is call back"
        MessagingCenter.Subscribe<Page1,string>(this,"callback", (send, arg) =>
        {
            Console.WriteLine(arg);
        });
    }
public override void OnPageFinished(Android.Webkit.WebView view, string url)
{
    base.OnPageFinished(view, url);
    view.EvaluateJavascript(_javascript, null);
    //send the callback content,Parameters can be defined by yourself
    MessagingCenter.Send<Page1,string>(new Page1(), "callback","this is call back");     
}
public partial class ConveyancingLeadPage : ContentPage
    {
         protected async override void OnAppearing()
        {  
            customView.weblink = viewmodel.BrokerData.config.conveyancing.listing_webview;

            // I need the callback to be execute here 

            customView.LoadCompleted+=LoadCompleted;

        }
    }