我试图将外部JavaScript库加载到我的代码中:
var s= document.createElement("script");
s.type = "text/javascript";s.src = "http://vcg.isti.cnr.it/3dhop/distribution/js/presenter.js";$(useTab).append(s);
我知道,在库presenter.js"中,我需要将一些const变量转换为var。我在服务器上下载了presenter.js"的本地副本并进行了更改,从而进行了检查。然而,我需要从互联网上加载那个图书馆。问题是,我能否修改外部JavaScript库并使我的程序工作?
我在StackOverflow的其他地方读到,您可以尝试ajax:
$.ajax({ method:'GET',dataType:'text',url:'http://vcg.isti.cnr.it/3dhop/distribution/js/presenter.js‘}).then( data = data.replace('const SGL_TRACKBALL_NO_ACTION = 0;’;'var SGL_TRACKBALL_NO_ACTION = 0;') data = data.replace('const SGL_TRACKBALL_ROTATE = 1;‘;'var SGL_TRACKBALL_ROTATE = 1;') data = data.replace('const SGL_TRACKBALL_PAN = 2;','var SGL_TRACKBALL_PAN =2;‘’)数据= data.replace('const SGL_TRACKBALL_DOLLY = 3;','var SGL_TRACKBALL_DOLLY = 3;')数据= data.replace('const SGL_TRACKBALL_SCALE = 4;','var SGL_TRACKBALL_SCALE = 4;') data.replace( data )}
但我运气不好。我是JavaScript的新手,所以任何帮助都将不胜感激。但我不确定我所要求的是否可行。提前谢谢你!
编辑:
嗨,伙计们,谢谢你们的回应!好的,我尝试了以下几点:
var scripts = ["spidergl.js", "presenter.js", "nexus.js", "ply.js", "trackball_sphere.js",
"trackball_turntable.js", "trackball_turntable_pan.js", "trackball_pantilt.js", "init.js"];
for (index = 0; index < scripts.length; index++) {
scripts[index] = "http://vcg.isti.cnr.it/3dhop/distribution/js/" + scripts[index];
}
getScripts(scripts, function () {
$(document).ready(function () {
init3dhop();
setup3dhop(referenceUrl, fileType);
resizeCanvas(640, 480);
moveMeasurementbox(70, 243);
movePickpointbox(70, 301);
//moveToolbar(20, 20);
});
});以下是实用程序函数getScripts
function getScripts(scripts, callback) {
var progress = 0;
scripts.forEach(function (script) {
$.getScript(script, function () {
if (++progress == scripts.length) callback();
});
});
}到目前为止还不错,但是当我跑小丑的时候,我会发现一个错误:
Uncaught ReferenceError: SpiderGL is not defined与presenter.js相关(我认为这与使用const而不是var有关)。但是,如果我刷新浏览器几次,它最终会工作!!当它工作时,控制台中不会出现错误!
所以,我想弄明白为什么会这样。再次感谢你的帮助!
发布于 2020-10-07 18:15:54
只有在端点没有CORS限制时才能使用ajax方法。大多数服务器都有这样的限制,因此ajax通常无法工作。
如果您可以找到一个不受这些限制的库托管的地方,就可以使用ajax --例如,jsdelivr将允许这样做:
fetch('https://cdn.jsdelivr.net/npm/@snakesilk/react-presenter@0.2.0/dist/index.min.js')
.then(res => res.text())
.then(console.log);
给定源代码后,您可以修改它的客户端,最后将修改后的代码附加为<script>标记。
但这真的很奇怪。对库进行分叉、进行所需的修改以及在您控制的服务器上承载修改过的脚本将更有意义。
https://stackoverflow.com/questions/64249900
复制相似问题