如何将javascript嵌入IIS UrlRewrite规则?

问题描述

上下文:Azure,Windows Server 2012 R2,IIS 8

IIS 8中的标准重写提供程序是{和'}',它们在各种上下文中用于表示捕获,替换和符号,例如{C:0}{R:1}{HTTP_ORIGIN}

我正在尝试使用规则将Google跟踪代码管理器标记注入页面。

<rule name="Inject GTM After HEAD" preCondition="ResponseIsHtml1" enabled="true">
  <match filterByTags="None" pattern="&lt;head.*?>" />
  <conditions logicalGrouping="MatchAll" trackAllCaptures="true" />
  <action type="Rewrite" value="{R:0}&lt;!-- Google Tag Manager --> &lt;script>(function(w,d,s,l,i) { w[l]=w[l]||[];w[l].push( { 'gtm.start': new Date().getTime(),event:'gtm.js' } );var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&amp;l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); } )(window,document,'script','dataLayer','GTM-XXXX');&lt;/script> &lt;!-- End Google Tag Manager -->" />
</rule>

不起作用,因为JavaScript包含{,并且IIS的UrlRewrite工具立即抱怨,并带有一个黄色框,显示为The rewrite provider " w[l]=w[l]||[];w[l].push( { 'gtm.start'" does not exist(请注意,它终止于{{1} },它将通常的:R与数字限定符分开。)

我尝试将C{交换,但是效果不佳,在生成的网页中提供了以下内容:

&#123;

自然,浏览器抱怨JavaScript代码不可靠。

IIS已经存在很长时间了。我希望解决方案对某人是显而易见的。使JavaScript成为可能的通常要做的事情是什么?

LATER

有人建议我在Google上输入“ inject”一词。好主意。结果?

  1. Microsoft演示了如何插入JavaScript注释。
  2. Webtuna演示了如何注入对在线资源的引用,而不是注入一段JavaScript代码。如果不是因为我要嵌入GTM区块,这将很好用。
  3. EG Innovations有很多有用的信息,但是提供的代码示例也不包含括号。

解决方法

我将附加一个查询字符串,并在重定向到的页面上有条件地包含您想要的JS。

因此,您会得到类似(来自here的东西)

<rewrite>
    <rules>
        <rule name="Redirect for download result page" stopProcessing="true">
            <match url="(.*)/test.aspx(.*)" />
            <action type="Redirect" url="{R:1}/test.aspx?rf=sp" appendQueryString="true" redirectType="Found" />
            <conditions>
                <add input="{QUERY_STRING}" pattern="flag=value" negate="true" />
            </conditions>
        </rule>
    </rules>
</rewrite>

然后,在您的重定向页面中,有类似的内容(来自herehere

<script type="text/javascript">
   if (window.location.href.indexOf("flag=value") > -1)) {
      document.getElementsByTagName("head")[0].innerHTML += ("<script src=\"...\" type=\"text/javascript\"></script>");
   }
</script>
,

我已经记录了在DEV使用的过程。

本质上,我们将GTM代码放在其他子域的js文件中,并嵌入带有指向该js文件的src的脚本标签。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...