【问题标题】:Get script-tag that called certain function获取调用某个函数的脚本标签
【发布时间】:2016-07-05 19:55:31
【问题描述】:

假设我有 first 脚本,其中包含函数导出

function export(*params*){
  let callerScriptReference = ....;
  .....
}

然后我有一个 second 脚本,我在其中调用此函数

export(*params*);

是否可以从导出函数体中获取对第二个脚本的引用?我想从该脚本标签中获取一些“data-*”属性。

脚本以随机顺序添加到页面中。

希望你能理解我想要完成的工作:D

感谢您的任何建议或帮助。

【问题讨论】:

  • 只找到脚本标签,不需要脚本内容。
  • 你能把它放在export()函数的参数中吗?请参阅stackoverflow.com/questions/403967/…,了解调用者如何获取对他们自己的脚本标签的引用。
  • 是的,我可以将它作为参数传递。但我正在创建一个在浏览器中动态加载资源的小框架。没有捆绑,没有连接。 (针对 http/2 进行了优化)。并且所有缩短语法的东西都非常受欢迎。事实上,我想在“数据模块”属性中指定模块名称。然后这个属性告诉我,导出函数是从哪个模块调用的。

标签: javascript resources load


【解决方案1】:

据我所知,没有内置方法可以获取有关包含调用代码的 <script> 标记的信息,因此您需要显式传递它。

function export(callerscript, otherparams...) {
    ...
}

调用者会这样做:

export(document.currentScript, otherargs...);

如果您在函数中执行此操作,则可以使用 IIFE 捕获闭包变量中的值。

var someFun = (function(curScript) {
                return function(stuff) {
                    export(curScript, stuff);
                }; })(document.currentScript);
someFun(stuffArgs);

【讨论】:

    【解决方案2】:

    如果您在浏览器中,您可以在 html 正文中添加另一个脚本标签。这将允许函数共享相同的范围。

    如果你在 nodejs 中,如果你在使用 ES5(目前最支持):

    • script1.js 结尾有:

    module.exports = function funName() { }

    • script2.js 开头有:

    var funName = require('script1');

    【讨论】:

    • 如何使用该代码获得<script> 标记的属性?
    • 我认为你没有理解这个问题。
    • 查看这个 jQuery 加载脚本的方法:api.jquery.com/jquery.getscript
    • 很抱歉,你不知道我在做什么。
    • 加载脚本的方法和这个问题有什么关系?他想要获取包含调用者脚本的<script> 标记的HTML 属性。
    猜你喜欢
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 2018-07-03
    • 2017-12-26
    相关资源
    最近更新 更多