如何删除Xamarin表单WebView中的元素

时间:2019-09-01 22:01:23

标签: android xamarin.forms webview

我想在Xamarin.forms WebView加载时删除其中的一个元素,但它返回null并导致应用程序崩溃。我怎样才能做到这一点? 我试图检查一个元素是否存在,但是没有任何成功。 这是我的代码

protected void OnNavigating(object sender, WebNavigatingEventArgs args)
    {



        Webview.Eval("const elements = document.getElementsByClassName(\"footer-section\"); while (elements.length > 0) elements[0].remove();");


    }

请帮助我。谢谢

2 个答案:

答案 0 :(得分:0)

您收到一个空异常,因为在尝试执行Javascript时未加载WebView。

为防止这种情况,您可以订阅OnNavigated Event:

  

WebView.Navigated事件

     

导航完成后引发的事件。

所以,这是一个示例:

public YourWebViewPage()
{
    InitializeComponent ();

    Webview.Navigated += WebViewNavigated;
}

private void WebViewNavigated(object sender, WebNavigatedEventArgs e)
{
   Webview.Eval("const elements = document.getElementsByClassName(\"footer-section\"); while (elements.length > 0) elements[0].remove();");
}

答案 1 :(得分:0)

您可以尝试覆盖功能onPageCommitVisible Android文档说:

  

此回调可用于确定安全点   使回收的WebView可见,确保没有过时的内容   如图所示。在最早的时间点被称为   确保WebView#onDraw将不再从中绘制任何内容   以前的导航。下一个抽奖将显示   WebView的WebView#setBackgroundColor或其中的某些内容   新加载的页面。

     

HTTP响应的主体开始时调用此方法   加载,反映在DOM中,并在随后的页面中可见   绘制。此回调发生在文档加载过程的早期,并且   因此,您应该期望链接的资源(例如CSS和   图片)可能不可用。

您可以尝试以下代码:

public override void OnPageCommitVisible(WebView view, string url)
     {
        string _javascript = "const elements = 
document.getElementsByClassName('footer-section'); for(i=0;i<elements.length;i++) { 
if(elements[i] != null){ elements[i].parentNode.removeChild(elements[i]); }}";

        view.EvaluateJavascript(_javascript, null);
        base.OnPageCommitVisible(view, url);
    }