在 Javascript 中打印 Javascript

Print Javascript in Javascript?

本文关键字:Javascript 打印      更新时间:2023-09-26

我正在为一个软件制作一个插件,该软件基本上允许您使用javascript检查页面大小,然后将相关的广告代码输出到屏幕上,从而为您提供"响应式"广告。

这适用于文字广告代码,但是当广告代码是 javascript 时,我遇到了一个障碍 - 我无法让用户提供的 javascript 输出到页面并执行。

这可能吗?

下面是一些示例代码:

<div id="admanagerresponsive">
    <script type="text/javascript">
      adUnit = document.getElementById("admanagerresponsive");
      adWidth  = adUnit.offsetWidth;
      if (adWidth >= 728) {
        <output ad code>
      }
    </script>
</div>

上面的代码将直接在页面中。

这样的事情可能吗?

编辑:

可以是任何广告客户的代码,例如 AdSense。它将是用户提供的,并且将是标准的html。但是,它可能包含标签,这些标签需要正确呈现和输出......

如果你真的需要注入添加包含script标签的html代码,并且你被授予了安全问题,我建议使用像jQuery这样的库来处理执行稍后添加<script>标签的跨浏览器问题。

此外,您还需要注意各种陷阱,例如:
HTML 配对是在脚本解析之前完成的,因此无论</script>出现在何处,这都会立即结束您的脚本。

这些示例对于在 html 页面中将该代码作为内联脚本的情况非常重要。

示例 1:

<script>
      adUnit   = document.getElementById("admanagerresponsive");
      adWidth  = adUnit.offsetWidth;if (adWidth >= 728) {
           // if you add </script> <b>this is visible as html</b> and everything below is not script anymore
      }
</script>

示例 2:

<script>
      adUnit   = document.getElementById("admanagerresponsive");
      adWidth  = adUnit.offsetWidth;if (adWidth >= 728) {
           var string = "<script> var test;</script>";//the same problem here everything behind the closing script tag is html and not script anymore
      }
</script>

因此,如果您需要一些脚本来注入其中,则需要使</script>不会被 html 解析器检测到:

<script>
      adUnit   = document.getElementById("admanagerresponsive");
      adWidth  = adUnit.offsetWidth;if (adWidth >= 728) {
           var string = "<script> var test;</sc"+"ript>";//that way the html parser does not detect the closing script tag
      }
</script>

更好的解决方案是根本不使用内联脚本,不仅因为这个原因,而且因为您应该始终将css,js和html分开。

把它分成两个想法。 从上面的 HTML 中,只需调用您在其他地方编写的 js 函数即可。 最初让 js 函数成为警报,以验证是否有效。

一旦工作,你就会遇到问题:如何为页面获取自定义 js? 答案是希望您可以像创建html文件一样创建和加载(一次性,自定义)js文件。 或者,像现在这样的图书馆.js可以提供帮助。 或者,您的 html 页面有一个脚本部分,您了解如何组装以包含 js。

您甚至可以预加载所有大小可能性,然后让第一段中的 js 例程选择要调用的正确例程,