gpt4 book ai didi

javascript - 动态加载脚本会改变其行为

转载 作者:行者123 更新时间:2023-11-30 13:10:18 25 4
gpt4 key购买 nike

我希望 paperjs 在按下按钮打开动画后加载,但如果在页面加载后加载纸张,paperscript 似乎不起作用。

如果您注释掉 setTimeout 并取消注释直接 $.getScript - paperjs 将触发 alert('hi')。我不明白。

<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
$(document).ready(function () {
var paperUrl = 'http://cdnjs.cloudflare.com/ajax/libs/paper.js/0.22/paper.js';
$("#jq").text("jQuery is now loaded.")
var lateLoad = function() {
$.getScript(paperUrl, function() {
$("#pp").text("Paperjs is now loaded.");
});
};
//setTimeout(lateLoad, 100);
$.getScript(paperUrl, function() {
$("#pp").text("Paperjs is now loaded.");
});
});
</script>
</head>
<body>
<script type="text/paperscript" canvas="myCanvas">
$('body').css({"background-color": "#999"});
alert('hi!');
</script>
<p id="jq">jQuery NOT loaded yet.</p>
<p id="pp">Paperjs NOT loaded yet.</p>
</body>
</html>

我在 Windows 7 x64 上使用 Chrome 23.0.1271.97 m。有人知道这里发生了什么吗?

最佳答案

我想我也想出了一个解决方法 - paper.PaperScript.load() 或详细说明:

<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
$(document).ready(function () {
$("#jq").text("jQuery is now loaded.")
var paperUrl = 'http://cdnjs.cloudflare.com/ajax/libs/paper.js/0.22/paper.js';
var lateLoad = function() {
$.getScript(paper_url, function() {
$("#pp").text("Paperjs is now loaded.");
paper.PaperScript.load(); // <-- The fix!
});
};
setTimeout(lateLoad, 1000);
//$.getScript(paperUrl, function() {
// $("#pp").text("Paperjs is now loaded.");
//});
});
</script>
</head>
<body>
<script type="text/paperscript" canvas="myCanvas">
$('body').css({"background-color": "#999"});
alert('hi!');
</script>
<p id="jq">jQuery NOT loaded yet.</p>
<p id="pp">Paperjs NOT loaded yet.</p>
</body>
</html>

这会导致 paperscript 扫描所有的 paperscripts。我在 https://github.com/paperjs/paper.js/blob/master/src/core/PaperScript.js#L270 找到了它在 github repo 中搜索“paperscript”时。虽然它仍然没有解释为什么纸在动态加载时不自己执行 load()。

编辑 - 我明白出了什么问题。与https://github.com/jquery/jquery/blob/master/src/core.js#L768有关因为 paperjs 不检查窗口加载事件是否已经触发,即 document.readyState === "complete"。我向 paperjs 提交了拉取请求 https://github.com/paperjs/paper.js/pull/156

关于javascript - 动态加载脚本会改变其行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14110205/

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