【问题标题】:Xamarin/Android webview hide website element/classXamarin/Android webview 隐藏网站元素/类
【发布时间】:2019-04-17 09:29:53
【问题描述】:

我正在尝试制作一个小 android 应用程序,显示加载网站的 web 视图。 我用下面的代码 sn-ps 来展示它。但我现在需要的是隐藏页眉和页脚上的一些元素(例如菜单)。我以为我可以不从网页加载一些类,但我不知道如何正确地做到这一点。有没有人有这方面的经验来分享一些亮点? :)

提前致谢。

protected override void OnCreate(Bundle savedInstanceState)
        {


            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.activity_main);
            Android.Support.V7.Widget.Toolbar toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
            SetSupportActionBar(toolbar);

            FloatingActionButton fab = FindViewById<FloatingActionButton>(Resource.Id.fab);
            fab.Click += FabOnClick;

            DrawerLayout drawer = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);
            ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, Resource.String.navigation_drawer_open, Resource.String.navigation_drawer_close);
            drawer.AddDrawerListener(toggle);
            toggle.SyncState();

            NavigationView navigationView = FindViewById<NavigationView>(Resource.Id.nav_view);
            navigationView.SetNavigationItemSelectedListener(this);

            wbv = FindViewById<WebView>(Resource.Id.webView1);
            wbv.SetWebViewClient(new ExtendWebViewClient());
            WebSettings webSettings = wbv.Settings;
            webSettings.JavaScriptEnabled = true;
            wbv.LoadUrl(txtUrl);


        }

internal class ExtendWebViewClient : WebViewClient
        {
            public override bool ShouldOverrideUrlLoading(WebView view, string url)
              {

                view.LoadUrl(url);
                return true;
              }
        }

编辑:只是为了反映对第二类的更改

public class ExtendWebViewClient : WebViewClient
    {
        public override void OnPageFinished(WebView view, string url)
        {
            base.OnPageFinished(view, url);
             string js = "var myElements = document.getElementsByClassName('fusion-main-menu');" +
              " myElements[0].style.display = 'none'; ";
            if (Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat)
            {
                view.EvaluateJavascript(js, null);
            }
            else
            {
                view.LoadUrl(js);
            }
        }

    }

【问题讨论】:

    标签: webview xamarin.android


    【解决方案1】:

    既然你启用了javascript,那么在webview中会有一个运行脚本的功能。

    这是使用 Xamarin.Forms.WebView 的 WebView 代码,这是您可以使用它的 id 隐藏任何 webview 元素的方法。

     var hide = await webview.EvaluateJavaScriptAsync("document.getElementById('UserName').style.display = 'none';");
    

    【讨论】:

    • 根据您的建议编辑了原始问题以反映第二类的更改。它可以很好地加载 webview,但它以某种方式忽略了 js 命令。如果我在网页控制台上执行它,它会隐藏元素。顺便说一句,它是 xamarin.android,如果它有任何改变的话。你知道我做错了什么吗?不得不将您建议的代码更改为适合我的代码。感谢您的宝贵时间。
    • 没关系,这是我的错。我试图找到错误的课程。谢谢。
    • 这就是为什么我提到 webview 是 Xamarin Forms 的原因,以便让您了解您真正需要的内容。不客气:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    相关资源
    最近更新 更多