Javascript head.appendChild在控制台中给出错误,但工作正常

Javascript head.appendChild在控制台中给出错误,但工作正常,javascript,inject,script-tag,Javascript,Inject,Script Tag,我试图在head中的页面加载中注入一个脚本,在脚本中我必须给出页面名称。 下面是我如何在ts文件中实现它 **var head = document.getElementsByTagName('head')[0]; var tag = document.createElement("script"); tag.type = 'text/javascript'; tag.innerHTML = "var DDO = {} DDO.pageData = {'pageName': " + pag

我试图在head中的页面加载中注入一个脚本,在脚本中我必须给出页面名称。 下面是我如何在ts文件中实现它

**var head = document.getElementsByTagName('head')[0];
 var tag = document.createElement("script");
 tag.type = 'text/javascript';
 tag.innerHTML = "var DDO = {} DDO.pageData = {'pageName': " + pageUrl + "} ";
 head.appendChild(tag);**
脚本正在被注入,但是控制台选项卡中抛出了一个错误

错误:VM3741:1未捕获的语法错误:appendChild处出现意外标识符

tag.innerHTML=“var DDO={}DDO.pageData={'pageName':“+pageUrl+”}”; 定义变量DDO后缺少分号, 另外,从pageUrl中的注入位置,确保定义了变量

尝试将脚本放在外部文件中,并在脚本标记中插入对该文件的引用,以防在内部html中定义的脚本中出现错误


试试这个

var head = document.getElementsByTagName('head')[0],pageUrl="somevalue";
var tag = document.createElement("script");
tag.type = 'text/javascript';
tag.textContent = "var DDO = {}; DDO.pageData = {'pageName': '" + pageUrl + "'} ";
head.appendChild(tag);
删除以前的脚本元素

var script = head.childNodes[0]; //get previous script element
head.removeChild(script); //removing script
您没有为键pageName的值提供单引号正确答案:

var head = document.getElementsByTagName('head')[0];
    var tag = document.createElement('script');
    tag.type = 'text/javascript';
    tag.id = 'adobedatalayer';
    tag.textContent = 'var DDO = {}; DDO.pageData =' + JSON.stringify(pageinfo);
    var script = document.getElementById('adobedatalayer');
    if (script != null) {
      head.removeChild(script);
    }
    head.appendChild(tag);

这里不需要外部文件脚本,可以在脚本中完成。非常感谢Aman。救了我一个晚上。还有一个问题。如果我想在注入另一个标签之前移除这个标签,我该如何做呢。正如我在问题陈述中所说的,我希望在页面更改时插入此标记,并确保删除前一个标记。您的回复将非常多。我想通过id移除标记。tag.id=“test”;现在我想删除这个带有这个id的标签。有可能吗?我基本上想这样做。var head=document.getElementsByTagName('head')[0];var tag=document.createElement(“脚本”);tag.type='text/javascript';tag.id=“测试”;tag.textContent=“var DDO={};DDO.pageData={'pageName':'”+pageUrl+“}”;如果(this.\u dataLayerInjected){var script=head.childNodes[0];//获取上一个脚本元素head.removeChild(script);//删除脚本}或者{head.appendChild(tag)this.\u dataLayerInjected=true;}删除这个id为:test的特定标记您不能向脚本元素添加id,它只能有src、charset、,延迟、类型、异步、头。子节点[0]不工作。当我调试时,它出现在head.childNodes[head.childNodes.length+1]。所以基本上我只想在每次页面加载时替换这个特定的标记。除此之外,还有其他脚本不应该受到影响。如果你有解决办法,我会非常感激的。