一个关于navigator的疑问,求乱入

tokimemo 2011-10-31 10:55:02
刚刚看别人写的一段代码,测试的时候一句话始终过不去。源码我就不写了,大家看个大概就行了。

var basepath = navigator.basePath;
......
......
function A(){
this.LeftImg.src = basepath + "/images/left.gif";//此句出现问题
......
......
}

如果是非ie6的环境,这里的basepath一定是undefined,组合出来的地址就成了undefined/inamges/left.gif
只有ie6才正常,能够组合出正确的地址。

我们且不讨论这个系统对浏览器的兼容性如何,关键是这里的navigator.basePath让我一头雾水。
除了ie6,ie7、ie8、ie9,ff,chrome均表示不知道这个对象是个什么鸟(ie5,ie4我没有,就不做测试了)。
询问了万能的谷歌和无所不知的度娘,他们都告诉我没有听说过这个对象。

好吧,我承认你是ie6特有的,不过我还是想知道这个对象的来龙去脉,比如那些浏览器支持该对象,是否后来又取消了,还是有其他对象代替了。
各位看官有知道的回一下吧。
...全文
100 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tokimemo 2011-11-04
  • 打赏
  • 举报
回复
ie6太怪异了,不管了。
liangws 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tokimemo 的回复:]

引用 4 楼 liangws 的回复:
IE下面也不会无视undefined啊。。IE下未赋值的情况下肯定还是“undefined/images/left.gif”

但是现实就是这样,在这个系统里,如果是ie8,一定是“undefined/images/left.gif”,但是在ie6下,却成了“/images/left.gif”,我又看了几遍对方写的js脚本,确实没有什么特殊的地方。真……
[/Quote]

判断问题的时候,最好用最原始的代码才能知道正确的答案
liangws 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tokimemo 的回复:]

引用 4 楼 liangws 的回复:
IE下面也不会无视undefined啊。。IE下未赋值的情况下肯定还是“undefined/images/left.gif”

但是现实就是这样,在这个系统里,如果是ie8,一定是“undefined/images/left.gif”,但是在ie6下,却成了“/images/left.gif”,我又看了几遍对方写的js脚本,确实没有什么特殊的地方。真……
[/Quote]
你试试
var a;
alert(a + "/test/")
tokimemo 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 liangws 的回复:]
IE下面也不会无视undefined啊。。IE下未赋值的情况下肯定还是“undefined/images/left.gif”
[/Quote]
但是现实就是这样,在这个系统里,如果是ie8,一定是“undefined/images/left.gif”,但是在ie6下,却成了“/images/left.gif”,我又看了几遍对方写的js脚本,确实没有什么特殊的地方。真是长见识啊。
liangws 2011-10-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tokimemo 的回复:]

好吧,我承认ie6也不支持,不过明明是undefined,为什么只有ie6不会组合成错误的字符串呢,而是组成了空字符串?
我单独写了一个html用来测试这个basePath,只要是ie,都会组合成“undefined/images/left.gif”这样的字符串,而在该系统中,只有ie6无视了这个undefined,组合成了“(空字符串)/images/left.gif”这样的字符串。
ie……
[/Quote]

IE下面也不会无视undefined啊。。IE下未赋值的情况下肯定还是“undefined/images/left.gif”
tokimemo 2011-10-31
  • 打赏
  • 举报
回复
好吧,我承认ie6也不支持,不过明明是undefined,为什么只有ie6不会组合成错误的字符串呢,而是组成了空字符串?
我单独写了一个html用来测试这个basePath,只要是ie,都会组合成“undefined/images/left.gif”这样的字符串,而在该系统中,只有ie6无视了这个undefined,组合成了“(空字符串)/images/left.gif”这样的字符串。
ie6果然是个怪物。
仲兴轩 2011-10-31
  • 打赏
  • 举报
回复
看了下, 都说 navigator 是浏览器版本信息的呀,
哪里有 basePath ?

应该是写到了哪个路径吧, 或者
var basepath = navigator.basePath;, 上面还有其它给定义的 navigator ?
liangws 2011-10-31
  • 打赏
  • 举报
回复
话说,我IE6下navigator也没有basePath这个属性
tokimemo 2011-10-31
  • 打赏
  • 举报
回复
好吧,我把对方的源码粘上来。不过单独测试的话,还是会有undefined,不知道系统中是否还有其他的问题。
代码是一个权限树的图片缓存,是在两个不同的js文件中的,我删除了无关的代码。

//-------------nav.js-------------
var basePath=navigator.basePath;

var icons = getIocns()

function getIocns() {
var icons=new Imagelist();

icons.path=basePath+"/console/images/tree/";
icons.type="gif";
icons.add("parent","default");
icons.add("expand","expand");
icons.add("collapse","collapse");
icons.add("children","link");
return icons;
}

//--------------tree.js----------
function Imagelist()
{
try{
var item=[]
count=0
this.path=""
this.type="gif"
this.err=""
iml=this

this.add=function(src,key)
{
var img=new Image()
if(src==null || src=="")return
if(src.indexOf("/")==-1)src=iml.path+src
if(!(/\.gif$|\.jpg$|\.png$|\.bmp$/i).test(src))src+="."+iml.type
if(key==null || key=="")key=src.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
item[count]=img;img.index=count;item[key]=img;count++;
img.onerror=function()
{
alert("Imagelist cause run time error:\nImage file "+img.src+" not found!")
item[img.index]=null;item[key]=null;count--;
}
img.src=src
return img
}
this.item=item
this.count=function(){return count;}
}
catch(e){
iml.err="alai_imagelist cause run time error!\nError number:"+e.number+".\nError description:"+e.description;
alert(iml.err);
return iml;
}
}

还有其他地方也都使用了basePath,但是这段代码是最明显的,在非ie6环境下无法正常加载图片(因为路径里含有undefined),而ie6正常识别并加载。

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧