为什么Javascript不显示结果

为什么Javascript不显示结果,javascript,Javascript,在每个html页面中都有未知数量的带有mailto href的锚。加载poage时必须做两件事 a) 用脚本替换这些mailto锚 b) 然后执行脚本,以便访问者可以看到脚本的输出 由于某种原因,它不起作用 在头部 <script> var eml = { info: 'aW5mb0BleGFtcGxlLmNvbQ==', serv: 'c2VydmljZUBleGFtcGxlLmNvbQ==', show: function(em) { document.wri

在每个html页面中都有未知数量的带有mailto href的锚。加载poage时必须做两件事

a) 用脚本替换这些mailto锚

b) 然后执行脚本,以便访问者可以看到脚本的输出

由于某种原因,它不起作用

在头部

<script>
var eml = {
  info: 'aW5mb0BleGFtcGxlLmNvbQ==',
  serv: 'c2VydmljZUBleGFtcGxlLmNvbQ==',
  show: function(em) {
    document.write(window.atob(em))
  }
};
</script>

var eml={
信息:“aW5mb0BleGFtcGxlLmNvbQ==”,
serv:'c2VydmljZUBleGFtcGxlLmNvbQ==',
显示:功能(em){
文件写入(window.atob(em))
}
};
在身体中,这起作用:

<script>eml.show(eml['serv'])</script>
eml.show(eml['serv'])
在体内,这不起作用:

<a href="mailto:@serv">more information</a>

<script>
var i, href, regx, str;
var els = document.querySelectorAll('a[href*="mailto:"]');
for (i = 0; i < els.length; i++) {
  href = els[i].href;
  regx = new RegExp('^mailto:@[a-zA-Z0-9]+$');
  if (regx.test(href) && eml[href.substr(8)]) {
    str = "<script>eml.show(eml['" + href.substr(8) + "'])<\/script>";
    console.log(str);
    els[i].outerHTML = str;
  }
}
</script>

变量i、href、regx、str;
var els=document.querySelectorAll('a[href*=“mailto:”);
对于(i=0;i
我尝试了很多代码片段,有jQuery和没有jQuery,但到目前为止都没有效果

做这项工作的方法是什么


塔克斯。Ronald

您需要调用函数,而不是写入文档:

var eml={
信息:“aW5mb0BleGFtcGxlLmNvbQ==”,
serv:'c2VydmljZUBleGFtcGxlLmNvbQ==',
显示:功能(em){
文件写入(window.atob(em))
}
};
变量i、href、regx、str;
var els=document.querySelectorAll('a[href*=“mailto:”);
对于(i=0;i

嗯,我投票以重复的方式结束了这个问题(并重新打开了它)。。。虽然技术上准确,但这可能是正确的答案,因为用户不需要动态插入脚本。但是,您应该解释为什么它不起作用(将outerHTML设置为脚本标记不会执行脚本),因为如果您在文档关闭之前遵循并执行它,它就可以起作用,而不是对代码的回答。在这种情况下,我必须用脚本替换未知数量的mailto锚,然后执行脚本。到目前为止,我知道这不能用innerHTML/outerHTML完成。有可能吗?脚本标记设置为内部/外部TML时不会执行。不过,提供了另一种选择,因为您实际上不需要在远离
文档的同时动态插入脚本。请参阅innerHTML不执行脚本,并且没有理由这样做。