gpt4 book ai didi

javascript - 如何确定 $.getScript 的 url

转载 作者:行者123 更新时间:2023-11-29 18:03:12 27 4
gpt4 key购买 nike

我创建了一个 JavaScript 文件,需要知道它的来源位置。在脚本内部,我有以下代码来确定 JavaScript 文件的 url。

var url = (function () {
if (module) {
// resolve URL from module - RequireJS
return module.uri;
}
else {
// resolve URL from currentScript - Firefox & Chrome
if (document.currentScript) {
return document.currentScript.src;
}
// resolve URL from DOM - Internet Explorer
else {
var scripts = document.getElementsByTagName('script'),
script = scripts[scripts.length - 1];

if (script.getAttribute.length !== undefined) {
return script.src;
}
return script.getAttribute('src', -1);
}
}
}());

我希望能够使我的 JavaScript 文件与使用 jQuery 的 $.getScript 的人兼容(它与 $.ajax 调用相同)。不幸的是,我一直无法弄清楚如何在使用时获取 url。我想到的一个选项是:

var ScriptUrl = "https://example.com/myscript.js";
var callback = function () {
console.log("Callback");
}
$.getScript(ScriptUrl, callback);

然后我可以在我的脚本中检查变量 ScriptUrl,但出于显而易见的原因我不喜欢这个解决方案。

var url = ScriptUrl ? ScriptUrl : (function () {
// ...
}());

最佳答案

我不知道它有多可靠,但唯一可行的是使用 ajaxComplete钩子(Hook)和一个神奇的唯一标识符在你的myscript.js的开头.这不适用于跨域请求,因为在那里您无法访问 responseText , 但在这种情况下,您可以扫描 script标签。

回调myscript时被调用时,您将检查 responseText 是否以此唯一标识符开头,如果是则urlajaxOptions应该是您的脚本之一。

//unique-identifier
$( document ).ajaxComplete(function(event, jqXHR, ajaxOptions) {
if( /^\/\/unique-identifier/.test(jqXHR.responseText) ) {
console.log('my url is: '+ajaxOptions.url);
}
});

console.log('is executed before the "ajaxComplete"');

如果您确定名称myscript.js本身是唯一的,那么您应该能够对相同域和跨域请求使用相同的技术,并且您不需要该注释。

当你的代码应该被执行时,你肯定需要添加更多的逻辑,因为你可以看到 console.log将在 url 之前执行众所周知。你可能需要检查是否 jQuery存在。

也许是这样的:

//unique-identifier
(function() {
var ScriptUrl;

function init() {

console.log('init');
}


if( window.jQuery ) {
jQuery( document ).ajaxComplete(function(event, jqXHR, ajaxOptions) {
if( /^\/\/unique-identifier/.test(jqXHR.responseText) ) {
ScriptUrl = ajaxOptions.url;
init();
}
});
} else {
//do some error handling or support an altnerative loader like requirejs
}

}());

关于javascript - 如何确定 $.getScript 的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33483773/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com