IE8中如何添加Activity
IE8中添加Activity的JavaScript脚本(这是一个来自淘宝网的例子)(本文最后脚本有做修改)
<script type="text/javascript"> function addActivity() { if (navigator.userAgent.indexOf('MSIE 8') == -1) { alert('请首先安装IE8.'); } else { window.external.addService('activities/taobao-search.xml'); } } </script>
相关XML描述文件:http://ie8.taobao.com/activities/taobao-search.xml
<?xml version="1.0" encoding="UTF-8" ?> <openServiceDescription xmlns="http://www.microsoft.com/schemas/openservicedescription/1.0"> <homepageUrl>http://www.taobao.com</homepageUrl> <display> <name>淘宝搜索</name> <icon>http://www.taobao.com/favicon.ico</icon> </display> <activity category="Find"> <activityAction context="selection"> <preview action="http://ie8.taobao.com/activities/preview.php?query={selection}" /> <execute method="get" action="http://ie8.taobao.com/list.php?query={selection}" /> </activityAction> </activity> </openServiceDescription>
<?xml version="1.0" encoding="UTF-8" ?> <openServiceDescription xmlns="http://www.microsoft.com/schemas/openservicedescription/1.0"> <homepageUrl>http://www.google.com</homepageUrl> <display> <name>Google Search</name> <icon>http://www.google.com/favicon.ico</icon> </display> <activity category="Find"> - <activityAction context="selection"> <preview action="http://www.google.com/search?q={selection}" /> <execute method="get" action="http://www.google.com/search?q={selection}" /> </activityAction> </activity> </openServiceDescription>
openServiceDescription是专门用于Activity的xml节点名。
形如selection的位置,若在尾部加“?”则表示若该标记为空,将以空格代替。如:
<execute method="get" action="http://example.com/done.aspx?url={documentUrl}&title={documentTitle?}" />
其中documentUrl是必选项,而documentTitle因为带了“?”,所以是可选项。
另外以下几种简单的标记在“预览”窗体中是不会有效的。
· <select>
· <input type="text">
· <text area>
关于脚本:
//JavaScript API for Activities //检查服务是否已经安装了 //参数:Service XML,name window.external.IsServiceInstalled("http://maps.live.com/GetMap.xml", "map");
//添加服务 //参数:Service XML window.external.AddService("http://maps.live.com/GetMap.xml");
下面是白皮书中所给出的示例,相对元素更齐全一些:
<?xml version="1.0" encoding="UTF-8"?> <openServiceDescription xmlns="http://www.microsoft.com/schemas/openservicedescription/1.0"> <homepageUrl>http://maps.live.com</homepageUrl> <display> <name>Map with Live Maps</name> <icon>http://www.live.com/favicon.ico</icon> </display> <activity category="map"> <activityAction context="selection" > <preview action=" http://maps.live.com/geotager.aspx"> <parameter name="b" value="{selection}" /> <parameter name="clean" value="true" /> <parameter name="w" value="320" /> <parameter name="h" value="240" /> <parameter name="format" value="full" /> </preview> <execute action=" http://maps.live.com/default.aspx"> <parameter name="where1" value="{selection}" type="text" /> </execute> </activityAction> </activity> </openServiceDescription>
下面是上面这个按钮的代码:
<div> <script type="text/javascript"> function addActivity(xml) { if (navigator.userAgent.indexOf('MSIE 8') == -1) { alert('请首先安装IE8.'); } else { window.external.addService(xml); } } </script> 试试下面这个功能吧:(选中之后是利用“博客园”的博问搜索进行搜索……) </div> <div><input onclick="addActivity('https://files.cnblogs.com/volnet/cnblogsactivity.xml');" value="将博客园添加到IE8的活动中" type="button"> </div>
<?xml version="1.0" encoding="UTF-8" ?> <openServiceDescription xmlns="http://www.microsoft.com/schemas/openservicedescription/1.0"> <homepageUrl>http://www.cnblogs.com</homepageUrl> <display> <name>博客园</name> <icon>http://www.cnblogs.com/favicon.ico</icon> </display> <activity category="Blog"> - <activityAction context="selection"> <preview action="http://space.cnblogs.com/search/q?all={selection}" /> <execute method="get" action="http://www.cnblogs.com/" /> </activityAction> </activity> </openServiceDescription>
因为IE8为了做兼容IE7以及过去的网页,添加了一个“模仿IE7(Emulate IE7)”的按钮,这导致了当使用了该按钮的网页在使用以上所述的脚本的时候,navigator.userAgent的值显示的是IE7内核的相关代码,因此我们的判断可能会不准确,但是Activity功能事实上并不依赖于IE内核而存在,也就是如果你用的是IE8但你仅仅只是使用了模仿IE7的功能,那么你实质上还是可以使用Activity功能的。因此上面一直使用的脚本可以修改为下面的样子,以兼容这种特殊的伪装行为。
function addActivity(xml){ try { window.external.addService(xml); } catch(e) { //alert(e.toString()); alert('请首先安装IE8'); } }
于此同时我也记录下了navigator.userAgent在常见浏览器中的一些值,以让大家更好地了解之前所使用的脚本所进行的内部工作。
//IE7(或IE8中使用了兼容IE7模式) Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 1.1.4322) //IE8 Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 1.1.4322) //Firefox/2.0.0.13 Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13 //Safari3 Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15(KHTML,like Gecko) Version/3.0 Safari/523.15
posted on 2008-04-08 00:48 volnet(可以叫我大V) 阅读(2410) 评论(5) 编辑 收藏 举报