热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Silverlight实用窍门系列:33.OOB模式下WebBrowser的简单应用--模拟浏览器和百度地图【附带源码实例】

Silverlight的OOB模式(out-of-browser)下可以提升用户操作权限,访问系统API、将Silverlight程序安装在本地计算机上面而不必再浏览器中运行,在本节将

        Silverlight的OOB模式(out-of-browser)下可以提升用户操作权限,访问系统API、将Silverlight程序安装在本地计算机上面而不必再浏览器中运行,在本节将讲诉一个只能应用于OOB模式下的WebBrowser控件的简单应用。

        首先创建一个新的Silverlight应用程序名为SLBrowser并且设置其运行在OOB模式下,鼠标右键点击SLBrowser项目,选择“属性”。在属性页的“Silverlight”栏下面我们在“允许在浏览器外运行应用程序”打钩。

        然后点击“浏览器外设置”按钮,设置窗口的样式,另外在最下面有一个“在浏览器外运行时需要提升的信任”按钮就是提升用户操作权限的。

        我们准备两个按钮“百度地图”、“浏览”,分别模拟一下两个功能:

             •点击“百度地图”按钮的时候直接加载本地的Html文件访问百度地图

             •点击“浏览”按钮的时候就将模拟一个浏览器,进入浏览器页面

        下面我们来看Xaml代码:

  
  
< Grid x:Name = " LayoutRoot " Background = " White " >
< TextBlock Height = " 23 " HorizontalAlignment = " Left " Margin = " 29,12,0,0 " Name = " textBlock1 " Text = " 查询地址: " VerticalAlignment = " Top " />
< TextBox Height = " 23 " HorizontalAlignment = " Right " Margin = " 0,8,207,0 " Name = " textBox1 " VerticalAlignment = " Top " Width = " 703 " />
< Button Content = " 百度地图 " Height = " 23 " HorizontalAlignment = " Left " Margin = " 804,8,0,0 " Name = " button1 " VerticalAlignment = " Top " Width = " 78 " Click = " button1_Click " />
< WebBrowser Height = " 638 " HorizontalAlignment = " Left " Margin = " 21,41,0,0 " Name = " webBrowser1 " VerticalAlignment = " Top " Width = " 953 " />
< Button Content = " 浏 览 " Height = " 23 " HorizontalAlignment = " Right " Margin = " 0,8,32,0 " Name = " button2 " VerticalAlignment = " Top " Width = " 77 " Click = " button2_Click_1 " />
Grid >

        下面我们来看CS代码如下(注意:WebBrowser控件的InvokeScript可以调用载入的html文件中的Javascript函数):

  
  
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
// webBrowser1加载本地的baiduMap.html页面
this .webBrowser1.Navigate( new Uri(Application.Current.Host.Source, " baiduMap.html " ))
}

private void button1_Click( object sender, RoutedEventArgs e)
{
// 调用加载的百度地图baiduMap.html内的BaiduSearch函数,并且传入值
this .webBrowser1.InvokeScript( " BaiduSearch " , this .textBox1.Text);
}
private void button2_Click_1( object sender, RoutedEventArgs e)
{
try
{
// 获取Uri地址,并且让webBrowser1载入该地址
string url = this .textBox1.Text.Trim().Replace( " http:// " , "" );
this .webBrowser1.Navigate( new Uri( " http:// " + url , UriKind.RelativeOrAbsolute));
// 当访问了网页之后设置隐藏百度地图搜索按钮
this .button1.Visibility = Visibility.Collapsed;
textBox1.Margin
= new Thickness( 0 , 8 , 118 , 0 );
textBox1.Width
= 792 ;

}
catch (Exception ex)
{
MessageBox.Show(
" 请输入一个有效的网址 " );
}
}
}

        准备一个BaiduMap.html以供WebBrowser控件调用链接到百度地图(注意这个文件请放到SLBrowser.Web项目下的ClientBin文件夹下面),代码如下:

  
  
DOCTYPE html PUBLIC " -//W3C//DTD XHTML 1.0 Transitional//EN " " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
< html xmlns = " http://www.w3.org/1999/xhtml " >
< head >
< meta http - equiv = " Content-Type " content = " text/html; charset=gb2312 " />
< title > 百度地图实例 title >
< script type = " text/Javascript " src = " http://api.map.baidu.com/api?key=d3501091615b31a7a3af15a29e6d7363&v=1.0&services=true " > script >
head >
< body style = " font-size: 12px; " >
< form id = " form1 " name = " form1 " method = " post " action = "" >
< div style = " width: 100%; height: 600px; border: 1px solid gray; " id = " container " >
div >
< script type = " text/Javascript " >
var map
= new BMap.Map( " container " );
var point
= new BMap.Point( 116.404 , 39.915 ); // 地图坐标
var keyWord = " 北京 " ;
map.centerAndZoom(point,
13 ); // 深度
map.enableScrollWheelZoom(); // 通过鼠标中间可放大缩小
// 增加放大缩小控件
map.addControl( new BMap.NavigationControl({ type: BMAP_NAVIGATION_CONTROL_SMALL }));
// 声明一个搜索对象
var local = new BMap.LocalSearch(map, {
renderOptions: { map: map }
});
// 封装一个搜索函数供Silverlight调用
function BaiduSearch(keyWord) {
local.search(keyWord);
}

script >
form >
body >
html >

        本源码使用VS2010+Silverlight 4.0编写,如需源码请点击SLBrowser.zip 下载。下面是加载百度地图和浏览器的效果图。


推荐阅读
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路
    本文介绍了FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路。当图表系列较多时,用户希望可以自己设置哪些系列显示,哪些系列不显示。通过调用FR.Chart.WebUtils.getChart("chartID").getChartWithIndex(chartIndex).setSeriesVisible()接口,可以获取需要显示的系列图表对象,并在表单中显示这些系列。本文以决策报表为例,详细介绍了实现方法,并给出了示例。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
  • C#多线程解决界面卡死问题的完美解决方案
    当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
  • Java图形化计算器设计与实现
    本文介绍了使用Java编程语言设计和实现图形化计算器的方法。通过使用swing包和awt包中的组件,作者创建了一个具有按钮监听器和自定义界面尺寸和布局的计算器。文章还分享了在图形化界面设计中的一些心得体会。 ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
author-avatar
dmcm0005
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有