Silverlight嵌入到HTML之windowless属性及运用AjaxControlToolKit时出现虚线边框的问题
2009-04-11 12:04:02 来源:WEB开发网所以我们的silverlight的<object/>元素的tabIndex也由0设置成了-1。而当关闭ModualPopup窗口时,对应的JS又恢复所有元素的tabIndex:
restoreTab: function() {
/// <summary>
/// Restore the tab indices so we tab through the page like normal
/// (and restore SELECT tags in IE6)
/// </summary>
for (var i = 0; i < this._saveTabIndexes.length; i++) {
this._saveTabIndexes[i].tag.tabIndex = this._saveTabIndexes[i].index;
}
Array.clear(this._saveTabIndexes);
//IE6 Bug with SELECT element always showing up on top
if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)) {
for (var k = 0; k < this._saveDesableSelect.length; k++) {
this._saveDesableSelect[k].tag.style.visibility = this._saveDesableSelect[k].visib;
}
Array.clear(this._saveDesableSelect);
}
},
silverlight的<object/>元素的tabIndex也恢复成了0。
关键就是这个<object/>的silverlight标签的tabIndex设置为0的这个操作,使得其周围出现了虚线边框——虽然初始状态下其tabIndex本来就是0。
我们可以做个实验,在silverlight以windowless模式嵌入到HTML页面时(非windowless模式不会出现边框),在页面初始化时(或某个事件触发时)显示将silverlight的<object/>标签的tabIndex设置为0:
<Script>
document.getElementById("silverlightObjectElementId").tabIndex = 0;
</Script>
这时,当鼠标点击Silverlight程序时,周围就会浮现虚线边框,如图:
为解决这个问题,可以在<object />元素的onfocus事件进行处理,让它不要得到焦点:
<script language=javascript>
document.getElementById("silverlightObjectElementId").onfocus = function() {
if (this.tabIndex != -1) {
this.tabIndex = -1;
}
}
</script>
另外,也可以在onpropertychange事件里进行处理,需要注意的是在firefox里不支持onpropertychange,而是oninput.
Tags:Silverlight 嵌入 HTML
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接