javascript - 无法从动态加载的脚本中读取 DOM 属性

标签 javascript jquery dom

在 HTML 中静态包含一个脚本,如下所示:

<script type="text/javascript" src="http://meerkatapp.co/widgets/embed.js" data-mute="false" data-social="false" data-cover="default" data-type="square" data-username="jessicadelfino"></script>

但是,动态调用脚本不起作用。

JavaScript 代码:

    // Create script object
    var script = document.createElement("script");

    // Configure script with Meerkat data
    script.type = "text/javascript";
    script.src = "http://meerkatapp.co/widgets/embed.js";
    script.setAttribute("data-mute", "false");
    script.setAttribute("data-social", "false");
    script.setAttribute("data-cover", "default");
    script.setAttribute("data-type", "square");
    script.setAttribute("data-username", "jessicadelfino");

    // Append script object
    $("body").append(script);

这是发生错误的位置(来自http://meerkatapp.co/widgets/embed.js):

window.currentScript = document.currentScript || (function() {
  var scripts = document.getElementsByTagName('script');
  return scripts[scripts.length - 1];
})();

main(window.currentScript)

function main(currentScript) {
      ...
      var btnContainerElm = currentScript
      var mkBtnUsername = btnContainerElm.getAttribute("data-username")
      ...
      mkBtnUsername = mkBtnUsername.replace("@", '')

此代码生成错误:Uncaught TypeError: Cannot read property 'replace' of null on the line mkBtnUsername = mkBtnUsername.replace("@", '').

显然,即使在脚本中设置了 data-username 属性,也未设置 mkBtnUsername

最佳答案

我的猜测是 document.currentScript 可能是 null (如果在事件处理程序内部检查该属性,例如 $(document),则可能会发生这种情况。准备好),并且您的后备函数选择了错误的脚本(scripts[scripts.length - 1])。尝试记录 window.currentScript

关于javascript - 无法从动态加载的脚本中读取 DOM 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32083650/

相关文章:

jQuery:查找并替换所有属性

javascript - rxjs 内部原生 map 提前退出

php - 需要帮助 : how to design my webpage that sorts data from a database?

javascript - 如何在 react-native 项目中检查 google play services 版本和 firebase 版本?

javascript - 然后在 jquery 中按顺序淡出多行

javascript - 在一个div中获取一个div

html - Shadow DOM 和自定义样式

javascript - 尝试单独读取 div 标签,两者在 Meteor JS 模板中共享相同的类

javascript - JQuery 创建一个滚动跟随 div

java - 无法解析带有嵌套 CDATA 部分的 XML