我想在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();");
}
请帮助我。谢谢
答案 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);
}