我对我将要提出的建议非常谨慎,因为我认为这是一个不幸的问题,即最初的设计不正确;你有点违背 Javascript 的基本工作方式。对于被指派将这些东西重新制作为 HTML 之外的代码的人,我真的更愿意将此类问题视为“工作保障”。
但如果你想听听,我确实有一个可能的解决方案,使用eval
. 仅凭这一点,我认为我会被否决,而且并非没有充分的理由。我什至没有对此进行测试(除了“具有替代类型的脚本”及其选择),但看到这个问题有两个赞成票,没有答案,我想我会建议它。因此,您将不得不对其潜在的安全风险进行评估。
首先用以下内容替换页面内脚本:
<script type="text/postRequireScript">alert($('#somediv').html())</script>
由于浏览器不知道“postRequireScript”是什么,它不会加载它。加载 requirejs 后,运行此脚本(您还可以为这些脚本添加一个“类”,以便更轻松地选择所有脚本)
$("script[type='text/postRequireScript']").each(function() {
var scriptContent = $(this).text();
// highly recommend you do at least some sanitization on scriptContent, if you know
// what sort of things to expect from it.
eval(scriptContent);
this.type = 'text/completedScript'; // prevent script from being re-run.
});
每次您添加可能包含脚本的 HTML 时,都需要运行它。