5

document.getElementById何か奇妙なことが起こっていますが、JavaScriptコードをPHP内で動作させることができないようです...

たとえば、次のPHPコード(以下)をPHPファイルにロードして実行すると、JavaScriptアラートは発生しませんか?しかし、PHPがエコー(または印刷)したソースコードをコピーしてHTMLファイルとして実行すると、JavaScriptアラートが発生しますか?では、JavaScriptがPHPタグの外部に保持されている場合でも、PHPタグの内部で作成された要素はJavaScriptで実行されませんか?

PHPのデモコードは次のとおりです。

<?php 
print "
<iframe id='my_id' name='my_id' src='http://www.php.com/'></iframe>

<SCRIPT LANGUAGE='javascript'> 
document.getElementById('my_id').contentWindow.onload = function(){
    alert('content loaded');
}
</SCRIPT>
";
?>

これだけがあなたのコードである場合でも、それは機能しません:

<iframe id='my_id' name='my_id' src='<?php echo"http://www.php.com/"; ?>'></iframe>

<SCRIPT LANGUAGE='javascript'> 
document.getElementById('my_id').contentWindow.onload = function(){
    alert('content loaded');
}
</SCRIPT>

表示されるソースコードは次のとおりです(リクエストに応じて)(contentWindow.onLoadSafariの私のものと同じドメインにないコンテンツでも正常に機能しています):

<iframe id='my_id' name='my_id' src='http://www.php.com/'></iframe>

<SCRIPT LANGUAGE='javascript'> 
document.getElementById('my_id').contentWindow.onload = function(){
    alert('content loaded');
}
</SCRIPT>

私の問題は、HTMLではこのコードが正常に機能し、アラートが呼び出されることです。PHPでは、コードが機能せず、アラートが呼び出されることはありません。PHPの処理方法に問題があり、document.getElementById問題はありません。.contentWindow.onload

4

8 に答える 8

11
<iframe id='my_id' onload="alert('Content Loaded');" name='my_id' src='http://www.php.com/'></iframe>

以上

<iframe id='my_id' onload='ShowAlert();' name='my_id' src='http://www.php.com/'></iframe>   

<script type='text/javascript'>
function ShowAlert(){
    alert('Content Loaded');
}
</script>

またはそれをエコーし​​たい場合

<?php
echo "<iframe id='my_id' onload='ShowAlert();' name='my_id' src='http://www.php.com/'></iframe>   

<script type='text/javascript'>
function ShowAlert(){
    alert('Content Loaded');
}
</script>"; ?>
于 2012-11-09T06:11:29.580 に答える
3
<iframe id='id' onload='display();' name='my_id' src='www.test.com'></iframe>   

<script type='text/javascript'>
function display(){
    alert('Loading');
}
</script>
于 2012-11-09T07:07:51.040 に答える
1

ドキュメントがロードされる前に呼び出すため失敗します。このようdocument.getElementByIdにフレームonloadハンドラーをアタッチする場合は、呼び出しをdocument.getElementById本文内に配置する必要がありますonload

何かのようなもの:

<script>
    function loaded() {
        document.getElementById('my_id').contentWindow.onload = function(){
            alert('content loaded');
        }
    }
</script>
<body onload="loaded()">
<iframe id='my_id' name='my_id' src='http://www.php.com/'></iframe>
</body>

jQueryのようなフレームワークを取得して、domreadyイベントを使用することをお勧めします。すべてのJavaScriptコードをdomreadyハンドラーでラップするのはかなり標準的です。

他の人が言及している代替案として、フレームオンロードハンドラーをhtmlに配置して直接アタッチする方法があります。

ここではPHPは何の効果もありません。

于 2012-11-09T12:36:35.287 に答える
1

関数をDOM要素のcontentWindowではなく、DOM自体のonLoadにアタッチします。

<iframe id='my_id' name='my_id' src='http://www.php.com/'></iframe>

<script> 
    document.getElementById('my_id').onload = function(){
     alert('content loaded');
    }
</script>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

したがって、PHPでは

<?php
echo <<< xyz
<iframe id='my_id' name='my_id' src='http://www.php.com/'></iframe>

    <script> 
        document.getElementById('my_id').onload = function(){
         alert('content loaded');
        }
    </script>
xyz;

?>

それは私のために働きます。

于 2012-11-15T20:56:14.337 に答える
0

あなたの問題は、コードのphp部分とは関係ありません。以下に示すように、同じドメインからファイルを読み込もうとすると、コードは正常に機能します。

   <?php
       print "<iframe id='my_id' name='my_id' src='test.php'></iframe>

       <SCRIPT LANGUAGE='javascript'> 

         document.getElementById('my_id').contentWindow.onload = function(){
             alert('content loaded');
         }
       </SCRIPT>
      ";
  ?>

ここでの問題は、クロスドメインリクエストを実行するときのiframe.contentWindowの所有権です。これは、iframeクロスドメインを検索したときにGoogleに表示される最初のリンクの1つです。この部分を参照してください:

iframeコンテンツを表すウィンドウオブジェクトは、iframeに読み込まれたページのプロパティです。包含ページが意味のある方法でiframeのウィンドウオブジェクトにアクセスするには、包含ページとiframeページのドメインが同じである必要があります(詳細)。

つまり、同じドメインからコンテンツをロードする場合にのみ、contentWindowにアクセスできます。

このSOの質問に対する答えも確認してください。

于 2012-11-07T04:33:08.240 に答える
0

これを試して

<?php

echo "<iframe id='my_id' name='my_id' src='http://www.php.com/'></iframe>

<script type='text/javascript'>
document.getElementById('my_id').onload = function(){     
  alert('content loaded'); 
}
</script>";

?>
于 2012-11-07T02:47:14.353 に答える
0

Ruben-Jは正しいです、html iframe内でonloadを使用してください、それはより簡単で、私が知る限り、php、埋め込みjavascriptで行うことができないかどうか

于 2012-11-15T19:04:00.213 に答える
-1

HTMLファイルで動作しますか?テストしましたか?

document.getElementById('my_id')。onload = function(){alert('contentloaded'); }

それを試してみてください

于 2012-11-07T02:50:51.140 に答える