<script type="text⼀html" id="">js模版引擎内运行js脚本

2025-01-07 16:01:13
推荐回答(3个)
回答1:

你描述的比较乱,不过我大概能理解你的意思。

因为没有具体的代码,所以也只能说说思路。


按我的理解,重新描述你现在的问题是:

通过模板渲染,或者 ajax 异步载入的 html 内容,会通过 innerHTML 或者一定的 DOM 操作,插入到文档中。你希望在这段文档碎片插入后,执行一些脚本。但是遇到的问题是:插入的脚本无法执行。


那么我的建议的解决方法有以下几种:


1、第一种方法,通过设置定时检查,来判断内容是否完成载入。

在 {{data.content}} 中放一个 “标识”。例如:


。。。。。



然后在整个页面的脚本中,加一个定时检查器 (下面代码放在整个页面的 head 里):

var flag = false; // 一个状态标记,记录需要进行的脚本是否执行过
// 用来检查的函数
function check(){
    // 如果脚本已执行过,则退出,避免重复执行。
    if (flag) return;
    
    // 尝试获取 {{data.content}} 中的 “标识”
    var obj = document.getElementById('a_special_id'); 
    
    // 如果获取成功,说明代码已经完成载入
    if (obj) {
        // 这里放上你想要进行的操作,例如你问题中的:
        jQuery(document).ready(function() {
            jQuery('.media-frame-content').css("height",winheight);
        });
    
        // 设置状态标记,避免脚本重复执行
        flag = true;
    } else {
        // 如果代码没有完成载入
        // 设置定时器,过一段时间再次检查
        setTimeout(check, 100);
    }
}

// 开始检查
check();


2、 第二种方法,是针对为什么插入的脚本不能执行来解决的。

一般来说,通过 innerHTML 或者 DOM 方法插入的 script 脚本都不能正常执行。

那么应该在你的模板解析函数中,进行一定的判断处理。

例如 ajax 获得服务器返回的数据后,检查有无 script 块,如果有,则提取其内容,并通过 eval 来执行。

示例代码:

// 伪代码,假设下面是一个通过 ajax 获取 get.php 页面得到返回数据的模式
$.ajax('get.php', function(data){
    var reg = /