1

我正在为一个软件制作插件,该插件基本上允许您通过使用 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。但是,它可能包含标签,这些标签需要正确呈现和输出......

4

2 回答 2

0

如果您确实需要注入包含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 分开。

于 2013-09-14T16:55:41.480 回答
0

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

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

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

于 2013-09-14T17:00:37.353 回答