zoukankan      html  css  js  c++  java
  • 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('/'));
                })(),
    
  • 相关阅读:
    在这个互联网泡沫时代,施主你有何焦虑?
    对于公司最近一次技术分享的总结
    Windows系统下Redis的安装
    论语
    系统的简单和复杂是由什么决定的?
    Swift之 ? 和 !
    div模拟table,可实现左右高度同增长(html布局)
    动态添加的无缝轮播
    根据数据库名获取表和字段信息(mysql版)
    博客园更新了?
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/1739945.html
Copyright © 2011-2022 走看看