javascript - 动态加载JS 动态加载更多JS

标签 javascript jquery dynamic-loading jquery-append

请在说“使用$.getScript(fileURL)$('body').append($('<script>', {type" 'text/javascript', src: fileURL}))”之前先阅读情况。

我正在尝试使用 Amara Embedder用于链接到视频。通常,我不会同时使用 jQuery 来完成如此简单的任务,但在这件事上我别无选择。

所以,我首先尝试了最简单的选项:

$(function() {
  $.getScript('https://amara.org/embedder-iframe');
});
<div class="amara-embed" data-height="480px" data-width="854px" data-url="http://www.youtube.com/watch?v=5CKwCfLUwj4"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

此操作失败,控制台条目类似于:

GET https://domain.com/embedder-widget-iframe/?data=%7B%22hei…22url%22%3A%22http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D5CKwCfLUwj4%22%7D 404 (Not Found)

从示例中可以明显看出,这效果不太好。问题在于,不是执行脚本并使用 amara.org域作为其基本 URL,该脚本使用 where $.getScript() 的域执行。已被处决。

使用 JavaScript,创建 SCRIPT 很简单。元素并将其附加到 BODY让它发挥作用。

window.onload = (function() {
  var link = document.createElement('script');
  link.type = 'text/javascript';
  link.src = 'https://amara.org/embedder-iframe';
  document.getElementsByTagName('body')[0].appendChild(link);
})();
<div class="amara-embed" data-height="480px" data-width="854px" data-url="http://www.youtube.com/watch?v=5CKwCfLUwj4"></div>

这会成功,因为它执行了 GET来自amara.org域:

https://amara.org/embedder-widget-iframe/?data=%7B%22height%22%3A%22480px%22%2C%22width%22%3A%22854px%22%2C%22url%22%3A%22http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D5CKwCfLUwj4%22%7D

现在,我尝试了 jQuery 的变体,例如 $('body').append($('<script>', {type" 'text/javascript', src: 'https://amara.org/embedder-iframe'}))$('<script>', {type" 'text/javascript', src: 'https://amara.org/embedder-iframe'}).appendTo('body')结果相同。

我无法找到将其标识为预期功能的文档,也无法找到它的解决方法。

最佳答案

404 错误来自 amara.org 脚本,而不是 jQuery 请求。当它在 jQuery 函数中运行时,我敢打赌 this 的某种上下文被错误分配。

编辑:找到了。该代码取决于脚本标记的源属性中的 url。

// This must be done when the js file is first loaded
var scriptFiles = document.getElementsByTagName("script");
var THIS_JS_FILE = scriptFiles[scriptFiles.length-1].src;

关于javascript - 动态加载JS 动态加载更多JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37490975/

相关文章:

javascript - MegaMenu 在打开另一个菜单项时不会关闭子菜单

javascript - 在 for 循环 jquery 中添加一个 if 语句

javascript - 位置粘性不占用空间

javascript - React js 状态管理

c# - 从 mvc Controller 中的 FormCollection 元素检索对象数组

javascript - 使 jQuery Waypoints 无法与 JavaScript 创建的内容很好地配合

javascript - JavaScript 中的字符串替换无法正常工作

c++ - 我可以从运行时加载的共享对象访问主机进程的符号吗?还有其他选择吗?

python - loader实例 `cdll`的属性是如何创建的?

c++ - Dependency Hell : linux . 所以插件动态加载