[WP8开发] WebBrowser控件与后台代码.cs简单的交互

大前提:我目前测试的环境是Windows Phone 8.1 Silverlight,所以控件是WebBrowser,而不是WebView。

做项目可能要用到网页与后台代码的交互问题,因为可能考虑到跨平台问题,所以公司的网页里某些链接需要客户端自行处理。

有如下HTML示例代码(重要部分):

 1 <!--列表标题-->
 2   <div class="am-list-news-bd">
 3     <ul class="am-list">
 4       <li class="am-g am-list-item-dated">
 5         <a href="appnews://map/北京市朝阳区XX路66号" class="am-list-item-hd"><img src="/Public/image/xxxaddress.png"/>&nbsp;北京市朝阳区XX路66号</a>
 6         <span class="am-list-date">></span>
 7       </li>
 8       <li class="am-g am-list-item-dated">
 9         <a href="appnews://tel/010-65431234" class="am-list-item-hd"><img src="/Public/image/xxxphone.png"/>&nbsp;010-65431234</a>
10         <span class="am-list-date">></span>
11       </li>
12     </ul>
13   </div>
14 </div>
15 <a href="appnews://youhuiquan/123456" class="am-btn am-btn-danger am-btn-block" role="button">领取优惠券</a>

App通常要求处理其中的以appnews://开头的链接,比如appnews://map/地图链接,iOS中用系统封装好的CLGeocoder处理一下就好了,那么WP8中怎么实现呢?

1. 首先设置一个WebBrowser:

<phone:WebBrowser Name="MainWebBrowser"

           IsScriptEnabled="True"

           LoadCompleted="MainWebBrowser_LoadCompleted"

           ScriptNotify="MainWebBrowser_ScriptNotify"/>

1.1 其中IsScriptEnable一定要设为True,系统默认是False的,因为一会儿的工作是要为WebBrowser注入JavaScript代码,所以必须设置为True。

1.2 LoadCompleted事件的作用是为WebBrowser添加JavaScript代码。

1.3 ScriptNotify事件是处理添加的JavaScript代码的逻辑。

1.4 添加语句使控件导航到上面的HTML。

至此前台工作结束。

2. 开始配置后台.cs文件(重要部分):

   private void MainWebBrowser_LoadCompleted(object sender, NavigationEventArgs e)
        {
            var local = (sender as WebBrowser).Source.LocalPath;

            if (local.Contains("discount/tid"))
            {
                MainWebBrowser.InvokeScript("eval",
                    @"
                    for (var i = 0; i < document.links.length; i++) {
                        document.links[i].onclick = function() {
                            window.external.notify(‘appnews://‘ + this.href);
                            return false;
                        }
                    }");
            }
        }

        private void MainWebBrowser_ScriptNotify(object sender, NotifyEventArgs e)
        {
            string str = e.Value;
            str = str.Replace("appnews://", "");
            if (str.Contains("map/"))
            {
                str = str.Replace("map/", "");
                Microsoft.Phone.Tasks.MapsTask map = new Microsoft.Phone.Tasks.MapsTask() { SearchTerm = str };
                map.Show();
            }
            else
            {
                MessageBox.Show("暂不支持该功能", "提示", MessageBoxButton.OK);
            }
        }

2.1 LoadCompleted事件中定义需要注入的JavaScript代码,因为我只有某个网页要用到,所以用if语句判断了一下。

调用InvokeScript添加JavaScript代码,目前的功能是点击某个按钮,跳转到地图,

而且网页中不乏有许多以appnews开头的链接,所以用window.external.notify(‘appnews://‘ + this.href)去做匹配。

2.2 当都定义好操作之后,接下来运行代码,点击某个按钮,进入ScriptNotify方法,if语句用来处理传入的字符串,也就是说处理HTML中的href。

2.3 注意:LoadCompleted中的return一定要写false,写true的话WP8会弹出“要从应用商店中搜索应用吗?”的MessageBox。

因为地图用到的是启动器,会导航出去,所以不会触发弹出搜索应用的MessageBox,

如果是其他操作,比如上面给用户提示不支持该功能的MessageBox,点击OK之后就会弹出搜索应用的MessageBox。

至此简单的交互工作全部结束,感谢开发群里的小伙伴提供的部分代码,参考 http://stackoverflow.com/questions/12703698/open-links-in-external-browser-in-webview-winrt

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

时间: 2024-10-11 06:25:54

[WP8开发] WebBrowser控件与后台代码.cs简单的交互的相关文章

IOS学习资源收集--开发UI控件相关

收集的一些本人了解过的iOS开发UI控件相关的代码资源(本文持续补充更新) 内容大纲: 1.本人在github上也上传了我分装好的一些可重复利用的UI控件 2.计时相关的自定义UILabel控件 正文: 1.本人在github上也上传了我分装好的一些可重复利用的UI控件 示例: 网址:https://github.com/HeYang123456789/UIView 2.计时相关的自定义UILabel控件 网址:https://github.com/mineschan/MZTimerLabel

winform中WebBrowser控件执行脚本

在实际应用中我们可能需要WebBrowser控件主动执行我们需要的脚本,执行脚本现在有两种方法. 1.WebBrowser控件加载脚本,简单方便,适用于简短的脚本,无法执行复杂操作. webBrowser.Navigate("javascript:editor.areaToFrame();document.getElementById('articlePostBtn').click();"); 相当于你在浏览器地址栏,直接输入脚本来执行. 2.使用微软提供的动态库,也就是Microso

winform WebBrowser控件中,cs后台代码执行动态生成的js

很多文章都是好介绍C# 后台cs和js如何交互,cs调用js方法(js方法必须是页面上存在的,已经定义好的),js调用cs方法, 但如果想用cs里面执行动态生成的js代码,如何实现呢? 思路大致是这样的,cs动态插入js到html上,cs执行html插入的js方法代码. 封装好的方法: /// <summary> /// webbrowser执行脚本 /// </summary> /// <param name="web">传入WebBrowser 

VS C# .NET WebBrowser控件 利用插入JS代码,实现控制弹出IE窗口

最近在做一个客户端程序,使用到自带的WebBrowser控件时,发现当JS调用window.open()或a标签的target="_blank"时使用的是弹出IE窗口,不知道为什么是这种设计,根本不满足需求嘛.上网查了一下相关资料,发现这个控件并没有属性能控制这个功能,于是找第三方控件,发现也还是不行(可能是我不够仔细尝试),而且要多出个几十兆的DLL.经过我几个小时的努力,放弃了...! 知道C#是可以与网页的JS交互的,于是想到网页上重写window.open()的方法,建一个HT

&lt;总结&gt;delphi WebBrowser控件的使用中出现的bug

Delphi WebBrowser控件的使用中出现的bug: 1.WebBrowser.Visible=false:Visible属性不能使WebBrowser控件不可见,暂时用 WebBrowser.Hide的方法代替,WebBrowser.Hide隐藏浏览器, WebBrowser.Show显示浏览器:    补充:WebBrowser的OnVisible事件 控制窗口的可见或隐藏,用法同上(经测试Visual属性改变时不会激发)    上述补充参考原网址:   http://www.tui

webBrowser控件使用(属于个人日记,本人也是新手)

网页模拟我知道2种 1:通过HttpRequest的Get/Post的提交方式得到页面 2:使用C#webBrowser控件实现页面模拟点击 在页面有加密算法,或者是随机参数不在解决能力范围内时候使用第2种,简单网页建议使用第1种! webBrowser使用 在Lode事件中 private void Form1_Load(object sender, EventArgs e) { webBrowser1.Navigate(“页面URL”); } 实现webBrowser1显示页面后,完成加载时

WebBrowser控件打开https站点

背景: 与上一篇博文一样,此文亦是由于开发DropboxAPI中遇到问题衍生出来的.由于需要重定向https类型网站,但自己的https证书是自签名的,总是提示'网站的安全证书存在问题'. 鉴此,查了些许资料,然而许多方法对我并没有什么卵用,不过以后还是可用用上的,故整理下[当然其中也有一些有效的方法] 首先,自己使用的是WPF中的WebBrowser 1.设置ServicePointmanager的验证回调,然而,这方法只能用于httprequest等托管代码中,webbrowser实现并不适

C# WebBrowser控件使用整理

一.简介 WebBrowser 控件为 WebBrowser ActiveX 控件提供了托管包装. 托管包装使您可以在 Windows 窗体客户端应用程序中显示网页. 使用WebBrowser 控件,可以复制应用程序中的 Internet Explorer Web 浏览功能,还可以禁用默认的 Internet Explorer 功能,并将该控件用作简单的 HTML 文档查看器. 此外,可以使用该控件将基于 DHTML 的用户界面元素添加到窗体中,还可以隐瞒这些元素在 WebBrowser 控件中

C#中的WebBrowser控件的使用

0.常用方法 Navigate(string urlString):浏览urlString表示的网址 Navigate(System.Uri url):浏览url表示的网址 Navigate(string urlString, string targetFrameName, byte[] postData, string additionalHeaders): 浏览urlString表示的网址,并发送postData中的消息 //(通常我们登录一个网站的时候就会把用户名和密码作为postData