Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在React应用程序上将HTML脚本附加到DOM_Javascript_Html_Reactjs_Dom_Window Object - Fatal编程技术网

Javascript 在React应用程序上将HTML脚本附加到DOM

Javascript 在React应用程序上将HTML脚本附加到DOM,javascript,html,reactjs,dom,window-object,Javascript,Html,Reactjs,Dom,Window Object,我正在开发一个功能,允许我们的用户嵌入其他服务脚本,在他们的市场上使用react.js运行 下图描述了用户添加脚本的Textarea(仅用于丰富内容) 我遇到了使用窗口加载事件的某些脚本(attachEvent、addEventListener等)的问题 我认为这里的问题是,加载页面后执行的脚本和window.onload之后从未调用 我正在接收脚本并将脚本标记提取为文本,然后将它们转换为有效的HTML脚本节点 下面的代码解释了这个过程 列表项 函数htmlTextToHtmlNode(htm

我正在开发一个功能,允许我们的用户嵌入其他服务脚本,在他们的市场上使用react.js运行

下图描述了用户添加脚本的Textarea(仅用于丰富内容)

我遇到了使用窗口加载事件的某些脚本(attachEvent、addEventListener等)的问题

我认为这里的问题是,加载页面后执行的脚本和window.onload之后从未调用

我正在接收脚本并将脚本标记提取为文本,然后将它们转换为有效的HTML脚本节点

下面的代码解释了这个过程

  • 列表项
  • 函数htmlTextToHtmlNode(htmlText){
    const el=document.createElement('dev')
    el.innerHTML=htmlText
    返回el.firstElementChild
    }
    const convertScriptsTextToDom=scriptTag=>{
    试一试{
    常量matchRegex=/[\s\s]*?/gi
    常量isValidScriptTag=matchRegex.test(scriptTag);
    如果(!isValidScriptTag)
    抛出新错误('无效的脚本标记')
    const scripts=scriptTag.match(/[\s\s]*?/gi);
    const scriptsNodes=scripts.map(htmlTextToHtmlNode);
    返回脚本节点
    }捕捉(错误){
    控制台错误(err);
    返回[]
    }
    }
    函数appendNodeToHead(元素){
    让tag=document.createElement('script');
    tag.defer=element.defer?element.defer:true;
    tag.async=element.async?element.async:true;
    if(element.src)tag.src=element.src
    tag.type=element.type?element.type:“text/javascript”
    tag.innerHTML=element.innerHTML
    const body=document.getElementsByTagName('body')[0];
    body.appendChild(tag);
    }
    导出默认值(脚本标记)=>{
    const Nodes=convertScriptsTextToDom(scriptTag)
    if(Array.isArray(Nodes)和&Nodes.length)Nodes.forEach(appendNodeToHead)
    }
    
    有什么想法吗