getBasePath 函数第二版

这是一个艰辛的课题,我在getBasePath函数中,被迫使用异常对象与正则匹配来完成它。由于异常对象的标准属性少得可怜,我依赖的恰恰是各浏览器的私有实现,IE这次却非常吝惜,最后的正则匹配就是留给它用的。但这样一来,意味着文件名必须写死,或者符合一些硬性规则。于是再展开研究,找到下面三个东西,虽然都失败了,还是写下来记念一下:


        //关于Automation server can't create object的问题
        //设置了一下IE(IE--工具--internet选项--安全--自定义级别,
        //将“对未标识为可安全执行脚本的ActiveX控件初始化并执行”设置为“启用”或“提示”),
        //http://www.vandyke.com/support/securecrt/004.html
        //http://objectmix.com/javascript/111174-how-get-current-direcorty-windows-scripting-5-1-a.html
        //http://www.virtualplastic.net/msgboard/thread.php?forum=1&thread=342
        //第一个
        var fso = new ActiveXObject("Scripting.FileSystemObject")
        var oFolder = fso.getFolder(".");
        alert(oFolder.path)
        //第二个
        var shell = new ActiveXObject("WScript.Shell");
        alert(shell.currentDirectory )
        //第三个(在浏览器环境中许多属性为undefined,因此失败了)
        //http://www.lslnet.com/linux/dosc1/31/linux-245615.htm
        //alert(external.menuArguments.location.href)

WScript.Shell对象还能做更多的事,如:


      var runcmd = function() {
        if(window.ActiveXObject)
          new ActiveXObject("WScript.Shell").run("cmd.exe");
      }
      runcmd();

最后从stackoverflow找到一个很好的方案:


      var scriptSource = (function() {
        var scripts = document.getElementsByTagName('script'),
        //取得当前DOM树解析到的最后一个script节点(并非实际上的最后一个script节点)
        script = scripts[scripts.length - 1];
         //如果是标准浏览器,原生对象的泛化方法都实现了name,length,call等属性
        if (script.getAttribute.name !== undefined) {
          return script.getAttribute('src')
        }
        //关于IE的getAttribute的第二个参数
        //http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx
        return script.getAttribute('src', 2)//要求原样输出
      }());

与window.onerror相比,一个是取得太迟,一个是取得过早,无法与异常对象的某些私有实现相提并论!并且它必须执行于一个JS文件中,限制比较多。下面是我的新实现(由方法改为一个属性了)


//第一版链接:http://www.cnblogs.com/rubylouvre/archive/2010/04/06/1705817.html
//第二版2010.5.10 bu 司徒正美
            baseUrl :(function(){
                var result;
                try{
                    a.b.c()
                }catch(e){
                    result = e.fileName || e.sourceURL;
                }
                if(!result){
                    var scripts = document.getElementsByTagName('script'),
                    script = scripts[scripts.length - 1];
                    result = script.src;
                }
                return result.substr( 0, result.lastIndexOf('/'));
            })(),
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值