Nodejs 在 ie11里获取不到当前正在执行js文件路径

Nodejs 在 ie11里获取不到当前正在执行js文件路径

查询相关资料,ie11中已经移除readyState,各位朋友有没有什么好方案解决这个问题。

var getCurScript = function() { if(document.currentScript) { return document.currentScript; } var head = document.getElementsByTagName(‘head’)[0], nodes = head.getElementsByTagName(‘script’), currentScript; nodes = this.makeArray( nodes ); for(var i = 0, len = nodes.length; i < len; i++ ) { var node = nodes[i]; if( node.readyState === ‘interactive’) { currentScript = node; } }

    return currentScript;
};

3 回复

标题:Node.js 在 IE11 中获取不到当前正在执行的 JS 文件路径

内容:

在 IE11 中,由于其对现代 Web 标准的支持有限,直接通过 JavaScript 获取当前正在执行的 JS 文件路径变得较为困难。特别是 document.currentScriptreadyState 这些属性在 IE11 中的行为并不一致或已被移除。

解决方案

我们可以使用一个替代的方法来尝试获取当前执行的脚本文件路径。由于 IE11 不支持 document.currentScriptreadyState 属性,我们需要采用一种更为间接的方式来确定当前执行的脚本文件路径。这里提供一个基于 URL 的方法,通过注释或自定义数据属性来标记当前脚本文件。

示例代码

// 定义一个函数来获取当前执行的脚本文件路径
function getCurrentScriptPath() {
    // 遍历页面中的所有 <script> 标签
    var scripts = document.getElementsByTagName('script');
    
    for (var i = 0; i < scripts.length; i++) {
        var script = scripts[i];
        
        // 尝试从自定义的数据属性中读取文件路径
        if (script.dataset && script.dataset.src) {
            return script.dataset.src;
        }
        
        // 或者检查是否有特定的注释来标识当前脚本
        if (script.innerHTML.indexOf('<!-- CURRENT_SCRIPT_PATH -->') !== -1) {
            return script.src;
        }
    }
    
    return null; // 如果没有找到,则返回 null
}

// 使用示例
console.log(getCurrentScriptPath());

说明

  1. 自定义数据属性:在每个 <script> 标签中添加一个自定义的 data-src 属性,例如:

    <script src="/path/to/script.js" data-src="/path/to/script.js"></script>
    
  2. 注释标识:在每个 <script> 标签内部添加一个特定的注释来标识当前脚本,例如:

    <script>
    <!-- CURRENT_SCRIPT_PATH -->
    </script>
    

通过上述方法,我们可以在 IE11 中通过遍历页面中的所有 <script> 标签来查找当前执行的脚本文件路径。这种方法虽然不是最理想的解决方案,但在现有条件下可以作为一个可行的替代方案。


没有解决方案吗

在IE11中获取当前正在执行的JS文件路径是一个比较复杂的问题,因为IE11对一些现代浏览器特性支持有限。document.currentScript在IE11中不可用,并且readyState也存在兼容性问题。

你可以通过一个不同的方法来尝试获取当前脚本的路径。一种常见的做法是将当前脚本的路径作为全局变量传递给你的脚本。这样你就可以在整个脚本中访问这个路径。

示例代码

假设你有一个HTML文件如下:

<!DOCTYPE html>
<html>
<head>
    <title>Example</title>
    <script>
        // 将当前脚本的路径作为全局变量暴露出来
        var currentScriptPath = document.scripts[document.scripts.length - 1].src;
    </script>
    <script src="path/to/your/script.js"></script>
</head>
<body>
</body>
</html>

然后在你的script.js文件中,你可以直接访问currentScriptPath变量:

console.log(currentScriptPath); // 输出当前脚本的路径

这种方法虽然不是最优雅的解决方案,但在IE11这样的旧版浏览器中通常是唯一可行的方法。如果你需要更复杂的逻辑来确定脚本的加载顺序或位置,可以考虑使用一些库或工具,例如Webpack等模块打包工具,它们可以帮助你在不同环境下更好地管理脚本的加载和执行。

回到顶部