-1

xml:

<Frames>

<bannerFrame1>
      <![CDATA[
      <iframe src="https://image.domain.com/promobanner1.html" height="320" width="629"                scrolling="no" frameborder="0" marginwidth="0" marginheight="0"></iframe>
      ]]>
    </bannerFrame1>

<bannerFrame2>
      <![CDATA[
      <iframe src="https://image.domain.com/promobanner2.html" height="320" width="629"                scrolling="no" frameborder="0" marginwidth="0" marginheight="0"></iframe>
      ]]>
    </bannerFrame2>

</Frames>

XML:bannerFrame1/iframe CDATA 源值可能看起来像这样

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
     <body>
       <div>
        <img src="banners/banner1.gif" border="0" alt="Banner"/>
       </div>
     </body>
  </html>

XSLT:我正在获取 bannerFrame1 的 CDATA 值

<xsl:template match="/">
    <xsl:value-of select="Frames/bannerFrame1" disable-output-escaping="yes" />
 </xsl:template>

我试图在 CDATA“bannerFrame1”的图像上添加谷歌分析事件跟踪代码。如何 <img src="banners/banner1.gif" border="0" alt="Banner">在获取 CDATA 值时添加 onclick 属性<bannerFrame1>?真的有可能吗?提前致谢。

Expected output: 
 <iframe>
    <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
         <body>
           <div>
            <img src="banners/banner1.gif" border="0" alt="Banner" onclick ="GoogleEventTracker();"/>
           </div>
         </body>
      </html>
</iframe>

框架来源:

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta http-equiv="Pragma" content="no-cache">
    <link rel="stylesheet" type="text/css" href="css/style.css">
    <link rel="stylesheet" type="text/css" href="css/ui-lightness/jquery-ui-1.7.2.custom.css">
    <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
    <script type="text/javascript" src="custombanner/jquery.min.js"> </script>
    <script type="text/javascript" src="custombanner/jquery.cycle.all.2.74.js"></script>
    <script type="text/javascript" src="js/jquery-ui-1.7.2.custom.min.js"></script>
    <!--<script type="text/javascript" src="js/custom.js"></script>-->
    <title>domain - It's time everyone flies</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta name="script" http-equiv="Content-Script-Type" content="text/javascript">
    <meta name="script" http-equiv="Content-Style-Type" content="text/css">
    <!--<script type="text/javascript" src="js/soapclient.js"></script>-->
    <style type="text/css">
        img, div, a, input
        {
            behavior: url(iepngfix.htc);
        }
        #nav
        {
            float: left;
            left: 8px;
            margin: 15px;
            position: absolute;
            top: 235px;
            padding-left: 242px; /* for 4 frames */ /*padding-left: 278px; /* for 3 frames */ /*padding-left: 312px; /* for 2 frames */ /*padding-left: 242px; /* for 4 frames */
            margin-left: 1px;
            margin-right: 1px;
            margin-bottom: 1px;
            height: 40px; /*background :url("banners/gradient.gif") repeat-x scroll 0 0 transparent;*/
        }
        #nav li
        {
            display: block;
            float: left;
            list-style: none outside none;
            margin: 2px;
            padding: 2px;
            padding-right: 4px;
            margin-top: 8px;
            width: 25px;
        }
        #nav a
        {
            border: 1px solid #ffffff;
            display: block;
            padding: 0;
            width: 25px;
        }
        #nav img
        {
            border: medium none;
            display: block;
            height: 20px;
            width: 25px;
            opacity: 0.5;
            filter: alpha(opacity=50);
        }
        #nav li.activeLI
        {
            background: #ff0000;
        }
        #nav li.activeLI img
        {
            opacity: 1;
            filter: alpha(opacity=100);
        }
    </style>
</head>
<body marginwidth="0" marginheight="0">
    <div class="hero">
        <div class="slideshow mainpromo" id="slideshow" style="margin-bottom: 50px;">
<!--            <a href="http://www.domain.com/Pages/SeatSalePromo.aspx" target="_top">
                <img src="banners/banner1.gif" border="0" alt="Banner" /></a>-->
            <img src="banners/banner1.gif" border="0" alt="Banner">
        </div>
        <ul id="nav">
        </ul>
        <div class="rightpane">
            <!--<a href="http://www.domain.com" target="_top"><img src="banners/promo-fares.jpg" width="206" height="214" border="0" alt="Thumbnail" /></a>-->
            <img src="banners/lite-fares.jpg" width="206" height="214" border="0" alt="Thumbnail">
            <a href="https://book.domain.com/Register.aspx" target="_top"><img src="images/registernow.gif" width="203" height="20" border="0" alt="See all Low Fares"></a>  
            <!--<center><a href="http://www.domain.com/Pages/WebCheck-in.aspx" target="_top"><font size="2" color="#ff6600">Web Check-In</font></a></center>-->
          <!--<a href="http://domain.com" target="_blank"><img src="images/topdestinatios_btn.gif" alt="" width="149" height="26" border="0" /></a>-->
        </div>
        <div id="alerts">
            <p>
                <strong>Seat Sale Alert! </strong>Be the first to know thePromos. <a target="_top" href="http://www.domain.com/pages/emms-signup.aspx">SUBSCRIBE NOW »</a>
            </p>
            <p>
                <!--                <strong>Seat Sale Availability</strong> Find the best time to travel. <a target="_top"
                    href="http://www.domain.com/documents/seat_map.pdf">DOWNLOAD PDF &raquo;</a>-->
            </p>
            <div class="clear">
            </div>
        </div>
        <div style="clear: both;">
        </div>
        <div id="mascot">
            <img src="images/mascot.png" alt="">
        </div>
        <div style="clear: both;">
        </div>
    </div>


</body></html>
4

1 回答 1

0

如果您控制 image.domain.com,那么您可以轻松添加该属性,但您不需要这种全面的方法来执行此操作。如果您不控制 image.domain.com,那么您就不走运了。(至少,我虔诚地希望如此。)

如果我正确理解了您的问题,您是在询问如何使用 XSLT 将由不同服务器提供的数据更改为 XSLT 样式表输出中 iframe 的内容。XSLT 很难这样做,因为在您的示例中,数据是由浏览器从 image.domain.com 获取的,作用于样式表的输出,而不是样式表。如果在浏览器中运行的样式表尝试直接检索数据并将其插入到输出文档中以代替 iframe,则浏览器将阻止该尝试,因为它违反了同源策略。

我印象深刻——我以为我永远不会对同源政策说好话,也不会觉得它有任何有用的目的,但你证明我错了。

在服务器上运行的样式表很可能能够解析足够多的bannerFrame1 的字符串值来识别指向的URI,获取数据,并将其插入到输出中以代替iframe。让它正确显示可能具有挑战性。

或者您可以使 iframe 指向的不是 image.domain.com,而是指向您自己服务器上的代理,该代理从 image.domain.com 获取数据,插入您的跟踪属性,并将修改后的数据传递给浏览器。(克服同源策略的标准方法:在进入的过程中将数据从您自己的服务器上反弹。同源策略不会阻止每个人包含来自其他来源的数据,只是那些无法设置代理的人.)

于 2012-12-18T03:50:59.963 回答