玩转C科技.NET

每天都在学习,每天都在退步 为什么?世界发展太快! 怎么办?加快学习速度! 如何做?关注.NET社区 进阶中……

导航

<2008年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

公告

Subscribe to this feed
Contact volnet online!

MSN群MyMSDN技术讨论群
群号:www.msdn@hotmail.com
Windows Live Alerts
欢迎大家踊跃加入讨论任何与技术有关的问题。
————————————
欢迎给我发送邮件:
volnet@tom.com
[标题格式]:[TO玩转C科技]<您的用户名/匿名>[<主题>]
————————————

 
您可以直接Gmail联系我噢!(Gtalk/Mail)
开机自启动,天天都在线哦!

LiveMessenger:
<My Library>

与我联系

搜索

 

常用链接

留言簿(4)

我参与的团队

我的标签

随笔分类(119)

随笔档案(105)

文章分类(15)

文章档案(15)

相册

家园建设

最新随笔

积分与排名

  • 积分 - 149645
  • 排名 - 245

最新评论

阅读排行榜

评论排行榜

【代码保留】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>
更多细节请查看活动白皮书
写了一个简单的Google搜索的Activity XML:
<?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>
其中有句用于描述homepageUrl节点的说明:The main URL of the Activity where the user can access the service through browsing. All URLs expressed in this format must match the domain of the homepageUrl.也就是后续的所有的URLs都必须与主页Url在相同的域中。比如上例中就必须都是google.com域中。

 


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('http://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的“管理活动”中进行移除。

因为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
Tag标签: IE8

posted on 2008-04-08 00:48 volnet(可以叫我大V) 阅读(1424) 评论(5)  编辑 收藏 所属分类: Browser

评论

#1楼  2008-04-08 08:42 李战      

弱弱的问一下,Activity是啥啊?   回复  引用  查看    

#2楼 [楼主] 2008-04-08 09:32 volnet(可以叫我大V)      

@李战
 
  回复  引用  查看    

#3楼  2008-04-08 10:03 Anders Liu      

呵呵,发现了已知问题:

function addActivity() {
if (navigator.userAgent.indexOf('MSIE 8') == -1) {
alert('请首先安装IE8.');
} else {
window.external.addService('activities/taobao-search.xml');
}
}


如果我用IE8,但启用了“Emulate IE7”模式,UA中是没有“IE 8”字样的,所以会让我“首先安装IE 8”。

建议改为将else子句里的内容放在一个try中。我还没试过呢,你试试看?   回复  引用  查看    

#4楼  2008-04-08 12:41 fox23      

汗,现在都用上了IE8了..   回复  引用  查看    

#5楼 [楼主] 2008-04-08 13:01 volnet(可以叫我大V)      

@Anders Liu
呵呵,我早上也发现了这个问题,现在没法改,晚上回去改,呵呵

————
已经修改咯,在文章的最后   回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-04-09 01:40 编辑过


相关链接:
 
使用Live Messenger联系我
关闭