C# Windows phone 8,web浏览器控件正在使用媒体元素打开媒体文件,并从应用程序中导航

C# Windows phone 8,web浏览器控件正在使用媒体元素打开媒体文件,并从应用程序中导航,c#,windows-phone-8,C#,Windows Phone 8,是否有方法在WP8上检测web浏览器控件是否使用媒体播放器自动打开媒体文件,然后激活OnNavigateFrom事件,以及如何将该事件与按下backBtn、Start或search按钮时激活的OnNavigateFrom事件区分开来。 这很重要,因为在这些情况下需要激活不同的代码。 是否有方法可以检测web浏览器控件何时选择某种媒体URL,并防止在外部应用程序中打开URL,但在web浏览器控件或应用程序中存在的某些媒体元素中打开URL?您可以覆盖OnBackKeyPress事件。 在App.xa

是否有方法在WP8上检测web浏览器控件是否使用媒体播放器自动打开媒体文件,然后激活OnNavigateFrom事件,以及如何将该事件与按下backBtn、Start或search按钮时激活的OnNavigateFrom事件区分开来。 这很重要,因为在这些情况下需要激活不同的代码。
是否有方法可以检测web浏览器控件何时选择某种媒体URL,并防止在外部应用程序中打开URL,但在web浏览器控件或应用程序中存在的某些媒体元素中打开URL?

您可以覆盖OnBackKeyPress事件。 在App.xaml.cs中定义静态布尔变量,将其初始化为false。 并在按下后退键时将其设置为真


当OnNavigateTo事件被触发时,将其设置为false。您将需要与uri进行http通信。然后,在检查响应时,您将能够清楚地了解url类型,即浏览器网页或在单独的媒体播放器中打开的媒体url

您将用于http通信的RequestContext类在HttpContext属性中包含有关http请求的信息。从路由构造URL时,将RequestContext类的实例传递给RouteCollection.GetVirtualPath方法

如果您看到requestContext.response.MediaType是text/html或text/plain或image/svg+xml或application/xhtml+xml,那么url是可浏览的, 对于任何其他mime类型,浏览器将根据url类型打开默认应用程序,如媒体播放器或解压实用程序

这就是我将可浏览URI和可下载URI分开的方式

    private bool IsBrowsableMimeType(RequestContext requestContext)
    {
        //If the mime is text/html or text/plain or image/svg+xml or application/xhtml+xml
        //then mime type is browsable
        //else it is downloadable
        if (requestContext.response.MediaType == null)
        {
            return true;
        }
        if (!requestContext.response.MediaType.Equals("text/html") && !requestContext.response.MediaType.Equals("text/plain") && !requestContext.response.MediaType.Equals("application/xhtml+xml") && !requestContext.response.MediaType.Equals("image/svg+xml"))
        {
            //If the url is of image mime type, then let the browser show the image, dont download it.
            if (!requestContext.response.MediaType.Equals("image/svg+xml") && requestContext.response.MediaType.Contains("image"))
            {
                return true;
            }
            return false;
        }
        else
        {
            return true;
        }
    }

这就是我如何实现的。

您在哪个事件上尝试了HTTP通信,因为当我从web浏览控件中选择表示视频链接的Uri时,我无法获得任何事件(如导航或类似…)我只是从应用程序中获取导航事件,无法从中获取任何有用的数据。那么,您正在创建HTTP通信以确定要转到哪个MIME类型uri的事件是什么?浏览器控件有一个“导航”事件,当浏览器导航到任何uri时会触发该事件。你可以在那里结账。但是,除非浏览器成功导航到uri,否则此事件会自动触发数次。在多次触发导航事件后,最终会触发诸如“Navigated”和“Navigation Completed”之类的事件。实际上,您甚至可以在将uri设置为浏览器进行导航之前对uri执行此检查。首先执行Mime检查,然后将其设置为browser。希望我能给你指引正确的方向。此外,“导航”事件在URI内部重定向的情况下也会触发多次。不知道你是否在任何有视频链接的页面上尝试此操作,因为当你从页面中选择视频链接时,web浏览组件不触发导航事件,也不触发导航事件或浏览器控件控制的任何其他事件,只是从应用程序到媒体播放器。我能得到的唯一事件是从应用程序中导航,所以基本上我不能得到任何我可以检查的事件。ScriptNotify是Web浏览器控件的一种方法,它会因您对其执行的任何操作而被触发。e、 g.链接单击或按住操作等。如果在浏览器控件中单击带有音频/视频的链接是您唯一要做的事情,您可以选择此ScriptNotify方法。实际上,甚至我也做了一些操作,在几个地方设置了几个标志,然后签入ScriptNotify。因为,每次单击浏览器都会让您执行脚本通知。因此,您需要确保已单击链接。