为什么Javascript无法显示结果

时间:2019-04-10 12:45:19

标签: javascript

在每个html页面中,未知数量的带有mailto href的锚点。装入量表时必须做两件事。

a)用脚本替换这些mailto锚点,

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

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

在头部

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

在体内,这起作用:

<script>eml.show(eml['serv'])</script>

在体内,这不起作用:

<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>

无论是否使用jQuery,我都尝试过很多代码段,但到目前为止没有任何效果。

完成这项工作的方式是什么?

感谢。罗纳德

1 个答案:

答案 0 :(得分:1)

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

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

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)]) {
    eml.show(eml[ href.substr(8)]);
  }
}