jquery-1.12.4.js:10254 XMLHttpRequest cannot load file:///D:/Users/.../Datepicker Widget.js?_=1469194829595.
Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.send @ jquery-1.12.4.js:10254
Datepicker Widget.html:118 Uncaught TypeError: $(...).datepicker is not a function
<!--
The following wrapper files contains the $.getScript( 'JQuery.UI.Datepicker URL') and
several patch functions that modify the datepicker object created by the getScript loader.
-->
<!-- Code that uses the patched datepicker -->
:
The wrapper would be structured something like:
/* *********************************************************
Using $.getScript to load the JQuery.UI.Datepicker and
then defining the patch functions needed to modify the
datepickers behaviours.
********************************************************* */
$.getScript( 'JQuery.UI.Datepicker URL' ...
/* Define Patch functions */
function Patch1() { ... }
:
function PatchN() { ... }
/* Execute Patch functions */
Patch1();
:
PatchN();
/* End of Wrapper file */
我请求您提供这些代码的演示… 会帮助我们很多。
感谢您的帮助。
谢谢,我只是借用了 writeScript 方法并将其稍微缩短了一些。令人惊讶的是,我做了多少次异步加载,而且总是忘记创建脚本元素的准确方法。谢谢!
也许应该提到“addEventListener”在 IE8 或更低版本中不受支持。
它们使用“attachEvent”。您可以像这样支持 IE
if(s.addEventListener) {
s.addEventListener(‘load’, function (e) { self.loaded(e); }, false);
} else if(s.attachEvent) {
s.attachEvent(‘load’, function (e) { self.loaded(e); }
}
或者如果您使用 jQuery,您可以使用
jQuery(s).load(function(e) { self.loaded(e); });
查看:https://mdn.org.cn/en-US/docs/Web/API/EventTarget.addEventListener)”
但是脚本标签没有“load”事件。您应该使用“onreadystatechange”来监听脚本加载。
if (s.addEventListener) {
s.addEventListner(‘load’, function(e) {
// 这里回调
}, false);
} else {
s.onreadystatechange = function() {
if (s.readyState in {loaded: 1, complete: 1}) {
// 这里回调
}
};
}
// 一些代码
function loadScript(url, callback){
var script = document.createElement(“script”);
script.type = “text/javascript”;
script.charset = “utf8”;
if (script.readyState) {// IE
script.onreadystatechange = function() {
if (script.readyState == ‘loaded’ || script.readyState == ‘complete’) {
script.onreadystatechange = null;
if (typeof callback === ‘function’) {
callback();
}
}
};
} else {// 其他浏览器
script.onload = function() {
script.onload = null;
if (typeof callback === ‘function’) {
callback();
}
};
}
script.src = url;
document.getElementsByTagName(“head”)[0].appendChild(script);
}
@jockchou:您关于使用 onreadystatechange 作为回调触发器的评论帮助我在 IE8 中使它正常工作。谢谢!
这个代码片段对我来说并不奏效,但是 jQuery.getScript() 非常有效!https://api.jqueryjs.cn/jquery.getscript/
我在本地服务器上运行,同时调查使用 JQuery.UI.Datepicker 插件。该插件需要一些补丁,我想将日期选择器的库代码加载和补丁包装到一个包装脚本中,使用日期选择器插件的页面可以包含该脚本,因此允许包装脚本加载库,我尝试使用 JQuery.getScript 调用,但我遇到了以下错误
我相信这是因为我的网站是本地托管的,因此在我要加载的文件的 URL 中没有 HTTP 或 HTTPS 协议前缀。对于本地包含,有没有简单的方法可以让它正常工作,而无需我注册自己的域名?在我完成对日期选择器的测试后,我的代码将被移至具有自己 HTTP URL 的服务器,因此这可能不再是问题,但在目前或其他本地项目中,我想更好地了解如何使这一切正常工作。
jQuery.getScript
的success
回调在脚本下载完成后调用,但不能保证在脚本执行完成后调用。一个基于此技术的稍微高级的 JavaScript 加载器,但它具有一个额外的功能,即它不会在任何情况下重新下载脚本。 https://github.com/ankit31894/javascript-asynchronous-loader
好吧,真可惜,这变成了一个 404 错误,它是一个私有仓库吗?看看你如何实现这一点会很有趣 :)
@Tony 我已删除该仓库,但如果您需要,我可以为您重新发布。您还想它吗?
嗨 Ankit,那很好,谢谢 :) 虽然为什么不使用 github gist 呢?
@Ankit 请重新发布该仓库。它会非常有用
Ankit G.,我也有兴趣看看你删除的仓库。
你或者其他人知道这些解决方案(你自己的和 $.getScript)是否也可以加载 JavaScript 文件和 CSS 文件。
另外,因为我是新手,所以请让我问问什么时候使用回调功能。如果我使用这些方法在页面标题区域中包含一个 JavaScript 文件,我是否使用回调执行它,也许使用 document.ready 事件,还是必须在页面主体中执行它?
我目前正在尝试加载 JQuery.UI Datepicker 库和一些修改日期选择器某些基本行为的修补函数,这需要我在页面主体中使用它们来创建日期选择器控件之前运行库和修补函数。在我的当前代码中,日期选择器的库和 JQuery 在页面标题中的标签中加载,但修补函数在页面主体中的标签中,在其中创建然后执行。我想将日期选择器库加载和修补函数放在一个包装脚本文件中。该脚本可以使用页面标题中的标签正常加载。这一切看起来有点像下面这样
如果以这种方式构建,并且日期选择器和修补函数具有使用回调功能执行的代码,这是否有效?
或者,如果更简单,我可以使用包装文件中的代码使用 document.ready 事件调用这些函数。
谢谢,
Howard Brown
请记住,这比使用带有 async + defer 标志的常规脚本标签慢得多。查看 https://ibb.co/nyhJ3v