-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" の画像に Google アナリティクス イベント トラッキング コードを追加しようとしています。<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>

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のコンテンツとして別のサーバーによって提供されているデータを変更する方法を尋ねています。あなたの例では、データはブラウザによってimage.domain.comからフェッチされ、スタイルシートではなくスタイルシートの出力に作用するため、XSLTがそうするのは難しいでしょう。ブラウザで実行されているスタイルシートがデータを直接取得し、iframeの代わりに出力ドキュメントに挿入しようとすると、ブラウザは同一生成元ポリシーの違反としてその試行をブロックします。

私は感銘を受けました-同一生成元ポリシーについて良い言葉を言うことは決してないだろうと思いましたし、それが何らかの有用な目的に役立つと感じましたが、あなたは私が間違っていることを証明しました。

サーバー上で実行されているスタイルシートは、bannerFrame1の文字列値を十分に解析して、ポイントされているURIを識別し、データをフェッチして、iframeの代わりに出力に挿入できる可能性があります。正しく表示するのは難しいかもしれません。

または、iframeがimage.domain.comではなく、独自のサーバー上のプロキシを指すようにすることもできます。プロキシは、image.domain.comからデータを取得し、追跡属性を挿入して、変更されたデータをブラウザーに渡します。(同一生成元ポリシーを克服するための標準的な方法:途中で自分のサーバーからデータをバウンスします。同一生成元ポリシーは、すべての人が他のソースからのデータを含めることを妨げるわけではなく、プロキシを設定できない人だけです。 。)

于 2012-12-18T03:50:59.963 に答える