[小结] 360安全桌面应用开发点滴(续)

这是 [小结] 360安全桌面应用开发点滴 的续篇。

 

IE HACK

 

FLOAT:LEFT

机器装了 IE9 时,float:left; 的子元素会无视父元素的 PADDING-LEFT 值,参见  http://news.163.com/special/news-for-360/ 的 .aside DIV。

[小结] 360安全桌面应用开发点滴

【360应用开放平台】http://dev.app.360.cn/

本文所述应用】http://v.163.com/special/open-for-360/

昨天终于消除了已知的 bug 。360安全桌面应用 封装的环境还是有颇多特别的地方的。

 

FLASH标签

虽然 《【兼容各浏览器】JavaScript 动态修改 swf 地址方法》介绍的写法 可以通吃 IE6 到 IE9:

<!----这是通过 FireFox \ Chrome 最新版和 IE6 IE7 IE8 IE9 的 flash 对象代码的写法 ---->
<object width="宽" height="高" align="middle" type="application/x-shockwave-flash"
 id="flash对象id" name="flash对象id" data="swf地址">
  <param name="quality" value="high">
  <param name="bgcolor" value="#261a12">
  <param name="allowscriptaccess" value="always">
  <param name="allowfullscreen" value="true">
</object>

 

但对 360应用封装环境 无效。有效的写法如下:

<object type="application/x-shockwave-flash" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0"
id="FPlayer" align="middle" height="482" width="856">
  <param name="allowScriptAccess" value="always">
  <param name="allowFullScreen" value="true">
  <param name="movie" value="{{{movieURL}}}">
  <param name="quality" value="high">
  <param name="wmode" value="opaque">
  <embed src="{{{movieURL}}}" id="FPlayer" quality="high" name="FPlayer" allowscriptaccess="always"
allowfullscreen="true" type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer" wmode="opaque" align="middle"
height="482" width="856">
</object>

 

 

渲染bug

封装环境有 IE6 的渲染 bug,如此文所述:《【笔记】 IE6 的渲染 bug

 

FLASH Share Object

FLASH Share Object 是一种美好的保存本地数据的方法:兼容所有浏览器、不限存储大小、不提交到服务器端浪费流量。在封装环境中使用 FLASH Share Object,除了要使用本文所述的 FLASH 标签的写法,还要记得使用相对路径——《相对路径修正 “对象不支持此方法” 错误》。

 

DEBUG

封装环境不会给出错误提

相对路径修正 “对象不支持此方法” 错误

感谢 CSDN此帖(http://topic.csdn.net/u/20100322/13/16b47772-bea7-4309-bc5e-d2e66e9c05f4.html) 提供了相对路径可能解决这个问题的信息。

 

问题

使用 flash 的 share object 进行本地存储,并通过了 ie6 – ie9 、 Chrome 和 Firefox 的测试。但是,以 360安全桌面 web app 的形式封装之后,每次试图调用 flash 创建 share object 的方法时,都 catch 到 “对象不支持此方法”的错误。仿佛 360安全桌面 web app 的封装环境有某些安全性的措施,阻止了 share object 的写入。

 

解决 继续阅读相对路径修正 “对象不支持此方法” 错误

[笔记] 消除 flash 视频播放器的叠音

本文讨论的是类似于 优酷360桌面应用(http://api.youku.com/widget/360box/index.html) 的切换视频的情况。即:所有操作在同一网页完成,无页面切换的情况。

JS 动态切换 flash 是采用 本站此文 所说的第三或第四种方法。测试环境是 360桌面app 的封装环境(点此下载 360安全桌面 WebApp 本地制作工具)。

 

叠音的产生 继续阅读[笔记] 消除 flash 视频播放器的叠音

[笔记] IE6 的渲染 bug

在 IE6 或者其它有采用 IE 内核的浏览器中,有时候会突然有一部分不渲染。例如:

Y.on("click", function(){
    var name = this.getAttribute("data-role");
    if(isNameValidated(name)){
        setSelectedStyle(this);
        loadContent(name);
    }
}, "ul.nav a");

function loadContent(name){
    refreshVariables();
    Y.jsonp(interfaces[name] + 'callback={callback}', function(data) {
       if (data.success){
   recordData(name, data);
         refreshLayout(name);
       }
    });
}

 

在 IE6 下会正常运行并获取数据。但是,虽然 setSekectedStyle(this); 改变了导航栏的样式,而 refreshLayout(name); 却没成功改变其它容器的内容。 再例如:

/* 在 refreshLayout(name) 中会调用如下函数 */
function turnOnBackground(){
    if(isBgTurnedOff){
        Y.one("#容器id").removeClass("backgroundOff");
        Y.one("#容器id").addClass("backgroundOn");
        isBgTurnedOff = false;
    }
}

 

当网页在采用了 ie 内核的 360桌面app 内运行时,如果系统是 win7 + IE8,则这个设置容器背景的函数有时会不生效。

以上两个例子都是在程序运行正确的情况下,偶尔出现的网页外观不改变的情况。这是 IE 的一个 bug。鉴别它们的方法是,在函数运行前增加:

alert("什么字符都可以");

 

就会发现,对弹出的对话框按确定之后,网页外观就都正常改变了。

想不 alert 修复这个问题,方法是用 setTimeout 将不起作用的部分包裹起来,并将延迟设为 0:

setTimeout(function(){
      //不起作用的更改 DOM 外观的语句
},0);