【问题标题】:how to hide html elements from windows phone webbrowser control如何从 windows phone webbrowser 控件中隐藏 html 元素
【发布时间】:2013-09-30 10:33:55
【问题描述】:

关于我需要什么的一些介绍,但在任何地方都找不到完整的答案。我使用 webbrowser 控件在我的应用程序中显示一个网站,但我想删除上面的导航,它单独存在于一个类名为“tabs-outer”的 html 元素中。我想在我的应用程序中而不是在主页的 css 中执行此操作,因为它是为了显示移动设备的内容而我只想在我的应用程序中显示在没有它的 webbrowser 控件和桌面/移动网站上它保持原样可见。

我发现了一些 java 脚本代码,例如 "$('#mydiv').allBut().hide();" 我知道我必须添加类似 "$('. tabs-outer').allBut().hide();" 但在哪里?!我不知道在哪里输入这个,如何在应用程序中调用它?!我需要更多信息。我发现了一个已有 2 年历史的线程,但没有关于具体做什么的信息。

如何以及在哪里使用这个 javascript,是否可以在应用程序中添加它,所以我在运行时调用它这个脚本?!有什么帮助吗?我是一个新手,所以我对javascripts一无所知,在windows phone和c#中也一无所知。

这是我现在使用它的方式:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {

        String url = NavigationContext.QueryString["url"];
        if (!String.IsNullOrEmpty(url))
        {
           WebBrowser.Navigate(new Uri(url));
        }

    }
    private void WebBrowser_LoadCompleted(object sender, NavigationEventArgs e)
    {
        WebBrowser.InvokeScript("RemoveNav");
        SystemTray.SetProgressIndicator(this, null);
        WebBrowser.Visibility = Visibility.Visible;
    }

我在我的网页上的标题中添加了一个脚本,如下所示:

<script type="text/javascript">
function RemoveNav() 
{ 
$('.tabs-outer').not(this).hide() 
}
</script>

它可以工作,但是,我必须将 webbrowser 控件的可见性设置为折叠页面才能加载 - “隐藏”我想要的元素,然后使其可见。但我需要一些东西来拦截这个元素的加载,但只能在我的 windows phone 应用程序中的 webbrowser 控件中。

【问题讨论】:

    标签: c# javascript html windows-phone webbrowser-control


    【解决方案1】:

    您提供了 jQuery 源代码。 jQuery 是开源的,可以免费下载和使用。 请查看此站点以获取有关 jQuery 的信息:http://learn.jquery.com/

    您的确切答案在这里找到并解释:http://learn.jquery.com/using-jquery-core/document-ready/

    实际上,页面加载后,代码将运行。您需要的代码在这里:

    <script>
    // A $( document ).ready() block.
    $( document ).ready(function() {
        $('.tabs-outer').hide();
    });
    </script>
    

    您需要将此代码作为 javascript 包含在您的网页中。要使用该代码,您还需要在 html 页面的 head 部分中包含以下行。

    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    

    这将加载 jQuery 插件,该插件将解释您的脚本并隐藏其类设置为“tabs-outer”的所有 div。

    祝你好运!

    【讨论】:

    • 我已经通过这个代码完成了 $('.tabs-outer').allBut().hide();我在加载 webbrowser 时调用了这个脚本,但我仍然看到在 webbrowser 控件删除它们之前加载元素......我如何“预加载”这个脚本并在 webbrowser 控件打开时调用它,所以我什至看不到这个元素。
    • 您可以在 CSS 中做到这一点,而完全不必使用 jQuery。一会儿我会提供一个新的答案。
    • 谢谢,但我无法想象如何在 css 中做到这一点,只对我的应用程序用户可见......但我现在已经做了一些小解决方法,我已经设置了可见性webbrowser 控件折叠直到页面加载,然后可见,因此脚本“隐藏”的部分不可见,但对于用户来说,这意味着等待整个页面加载。
    • 在应用我的最新答案并向我提供反馈之前,请从您的标题中删除 jquery 导入和脚本。它不是必需的,会造成过热。试试 CSS 解决方案,让我知道它是怎么做的 :-)
    【解决方案2】:

    我添加了这个新答案,因为在某些情况下,对于某些用户来说,我之前的答案就足够了。

    这个问题可以用 CSS 解决。 您从移动设备应用程序加载页面并可以访问标题部分。考虑到这一点,您可以从那里设置 div 的样式。

    使用 !important 将覆盖其他规范,但如果 css 已经使用 !important(我非常怀疑),您必须确保您的样式位于页面样式之后。考虑到这一点,尝试在 head 元素中添加以下代码:

    <style>
        .tabs-outer {
            display: none !important;
        }
    </style>
    

    这将完全删除您的 div。

    更新:为所有设备隐藏它们并为非 wp 显示它们

    第 1 步:在标题部分添加样式

    <style>
        .tabs-outer {
            display: none;
        }
    </style>
    

    第 2 步:在 jQuery API 的标头部分添加导入

    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    

    第 3 步:在标题中添加代码

    <script type="text/javascript">
    $(document).ready(function(){
        if(!navigator.userAgent.match(/IEMobile/i) && !navigator.userAgent.match(/Windows Phone/i)){
            $(".tabs-outer").show();
        }
    });
    </script>
    

    就是这样。桌面速度更快,因此它应该足够快地加载元素并显示它们。

    **更新:在 CSS 中使用媒体查询和 !important 隐藏您需要的内容并自定义显示

    您可以在CSS中添加以下代码以最有效的方式解决问题:

    @media only screen
    and (min-device-width : 160px)
    and (max-device-width : 640px) {
        .tabs-outer {
            display: none !important;
        }
        html {
            font-family : "Palatino Linotype";
            font-size : 12;
            font-color : #98AFC7;
        }
    
        .........
    
    }
    

    资源:http://css-tricks.com/snippets/css/media-queries-for-standard-devices/

    您现在可以保留您的自定义样式。对不起,我第一次没有得到它,但是自从我在网站上工作以来已经很久了。

    请提供反馈。再次:-)

    【讨论】:

    • 我知道我可以通过这种方式删除它,但这种方式也适用于桌面用户和移动设备用户。我需要这个脚本才能在我的 Windows Phone 应用程序的 webbrowser 控件中使用它。所以我不能从应用程序内触发上面的这个?!
    • 但是你的第一篇文章帮助我删除了它,但它很慢,因为它加载页面然后隐藏,我希望在页面加载之前有这个脚本可用,所以我用 webbrowser 控件调用它所以页面呈现并且div没有呈现。这可能吗?
    • 等等。据我了解,您在 windowsphone 应用程序中添加了 jQuery 代码。所以我告诉你用这个 CSS 样式替换 jQuery 脚本,这将解决它。您无权访问 windowsphone 应用程序的 head 部分吗?
    • 哦,你的意思是我应该在应用程序中做广告?在网页浏览器控件所在的页面上或在哪里?!
    • 我现在真的不知道在哪里输入这个,因为在我的应用程序中的 webbrowser 控件所在的 xaml 页面上,我无法将它添加到任何地方,因为“样式”不在我的应用程序的任何命名空间中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2011-12-28
    • 1970-01-01
    相关资源
    最近更新 更多