惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

W
WeLiveSecurity
T
Tenable Blog
Project Zero
Project Zero
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
S
Schneier on Security
Scott Helme
Scott Helme
S
Securelist
Know Your Adversary
Know Your Adversary
Vercel News
Vercel News
IT之家
IT之家
V
V2EX
F
Fortinet All Blogs
Simon Willison's Weblog
Simon Willison's Weblog
K
Kaspersky official blog
博客园_首页
T
Tailwind CSS Blog
The GitHub Blog
The GitHub Blog
Spread Privacy
Spread Privacy
Microsoft Security Blog
Microsoft Security Blog
Cisco Talos Blog
Cisco Talos Blog
The Register - Security
The Register - Security
有赞技术团队
有赞技术团队
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Cyberwarzone
Cyberwarzone
Google DeepMind News
Google DeepMind News
The Hacker News
The Hacker News
L
LINUX DO - 热门话题
Hugging Face - Blog
Hugging Face - Blog
博客园 - 三生石上(FineUI控件)
A
Arctic Wolf
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
CXSECURITY Database RSS Feed - CXSecurity.com
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Threat Research - Cisco Blogs
P
Proofpoint News Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy & Cybersecurity Law Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CERT Recently Published Vulnerability Notes
S
SegmentFault 最新的问题
AWS News Blog
AWS News Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
P
Proofpoint News Feed
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Vulnerabilities – Threatpost

博客园 - silverlightfans

sql server 获取数据库中每个表的磁盘占用情况 扩招的后果(搞笑版) 数据仓库构建实施方法及步骤(转载) treeview非xml数据源绑定 VS 2008 JavaScript Intellisense for Silverlight google 的百毒视频,巨搞笑啊,不知道是不是真的 国际支付平台又添新成员Amazon FPS asp.net 客户端回调功能的实现机制探讨(响应部分及可能的优化) asp.net 客户端回调功能的实现机制探讨(请求部分) 黎巴嫩的一位mvp写的一篇文章 关于为什么web service 构造函数只能是无参数构造函数问题的解答 Silverlight:动态从服务器端获取XAML来绘制前台 javascript附加事件,ff 和 ie 网易的高级提示功能 asp.net ajax 包装得似乎有些过分 PageMethods未定义 的解决 微软为google修改Vista 最好不要使用百分比宽高来创建silverlight Silverlight:一个IE浏览器
利用Tiny Framework 从托管代码中直接操作页面的 DOM元素
silverlightfans · 2007-06-19 · via 博客园 - silverlightfans

怎样从托管代码访问HTML DOM

这篇文章将演示如何从silverlight程序以编程的形式在托管代码中访问html DOM,控件以及虚拟元素。直接的访问DOM可以让你具备了在客户端直接操纵页面元素的能力,而无需饶个大弯,与服务器进行交互。(这个大概就是开心大哥所说的客户端的内置Tiny Framework

演示步骤:

1 处理XAMLCarvas加载事件

2 html Dom 与事件挂钩。

3 访问Dom的一个属性。

4 Dom中调用一个方法。

1 silverlight程序中处理XAML事件

使用XAML Carvas  Loaded事件来建立页面和托管类的联系。在XAML文件的Loaded属性中,要指名一个要在托管代码中调用的方法名,它将用来处理这个加载事件。下面的例子将Load事件赋值给负责处理该事件的onloaded 方法。

Canvas

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    x:Class="Samples.Silverlight.CS.BasicCanvas;assembly=HtmlDOM1.dll"

   x:Name="rootCanvas"   Height="500" Width="500" Loaded="OnLoaded"

Background="Red" ></Canvas>

在托管代码中添加一个在已经在刚才的XAML文件中指名的那个onloaded方法,这个方法能处理任何的初始化任务,创建、注册对象,附加事件处理器等等。

2           public void OnLoaded(object sender, EventArgs e)

为了在事件处理方法中能够访问Dom,创建一个私有的组件级别的HtmlDocument类对象,并把它赋值给当前页面的对象。

1.                           document = HtmlPage.Document;

处理Dom 元素  为了从托管代码中获取对页面元素的引用,你可以使用HTML document  对象的GetElementByID方法来获取,这个方法跟javascript的同名方法类似,也是传递一个页面的元素id给它,来获取元素的引用。例如:

HtmlElement btnEchoText = document.GetElementByID("btnEchoText");

附加一个事件处理器:为了给button附加上一个 onlick事件,你需要先编程来获取这个button的引用,然后使用如下代码对这个控件进行事件附加处理。

bool ec1 = btnEchoText.AttachEvent("onclick", new EventHandler<HtmlEventArgs>(this.OnEchoTextClicked));

写一个真正的事件处理方法,以下的方法定义告诉你如何去声明一个私有方法来处理附加在button上的事件。

private void OnEchoTextClicked(object sender, HtmlEventArgs e)

访问Dom 元素的某个属性

使用Dom对象的属性来访问那个对象。例如你可以使用HtmlPage 对象的属性来获取当前的页面的URIUniform Resource Identifier)。

string outputText = HtmlPage.DocumentUri.AbsolutePath + " - " + HtmlPage.CurrentBookmark;

将属性信息赋值给页面的另外一个元素,例如将他赋值给一个文本框。使用SetAttribute方法设置Dom元素的属性值。

document.GetElementByID("txtOutputProperties").SetAttribute("value", outputText);

调用在html Dom中的方法:

在你需要调用的那个关联方法里面获取控件的引用。

直接调用dom方法,例如下面的方法演示当点击了按钮后如何利用HtmlPage对象的navigate方法来将浏览器跳转到另外一个url中。

private void OnJump(object sender, EventArgs e)

{

  HtmlPage.Navigate("http://www.msn.com");

}

 

不知道支持客户端CLR环境的类有多少,想必应该不多,比如肯定不会有对文件的操作,那silverlight就太恐怖了....不过我曾经幻想过它能够发起tcp连接,这样如果在架构一个非常健壮的客户端程序的时候,效率可能会高些。但是如果这样的话,会不会有黑客在silverlight代码里面发起对别的网站的频繁链接,导致目标网站崩溃呢???不过似乎这个担心不仅仅在silverlight程序上。废话一通了,不过大家还是拭目以待客户端CLR 的功能吧!(很遗憾的告诉大家,目前不支持类似flash的调用本地摄像头api来摄录或者拍大头贴,让部分视频类网站失望了。)