簡體   English   中英

PHP中的JavaScript無法正常工作(document.getElementById)

[英]JavaScript inside PHP not working (document.getElementById)

發生了一些奇怪的事情,但我似乎無法在PHP內部獲得JavaScript代碼document.getElementById ...

例如,將以下PHP代碼(如下所示)加載到PHP文件中並運行它,沒有JavaScript警報? 但是,如果您復制PHP回顯(或打印)的源代碼並將其作為HTML文件運行,則會出現JavaScript警報? 因此,在PHP標記內部創建的任何元素都不能在JavaScript中運行,即使JavaScript不在PHP標記之外?

這是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>

以下是出現的源代碼(根據請求)(對於與Safari不在同一域中的內容, contentWindow.onLoad也正常工作):

<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沒有錯。

<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>"; ?>
<iframe id='id' onload='display();' name='my_id' src='www.test.com'></iframe>   

<script type='text/javascript'>
function display(){
    alert('Loading');
}
</script>

它失敗是因為你在加載document.getElementById之前調用了document.getElementById,如果你想像這樣附加frame onload handler你需要在body onload調用document.getElementById

就像是:

<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>

甚至可以更好地domreadyjQuery這樣的框架並使用domready事件。 它是在domready處理程序中包裝所有javascript代碼的相當標准。

其他人提到的另一種方法是通過將它放在html中來直接附加框架onload處理程序。

PHP在這里沒有任何影響。

將函數附加到DOM本身的onLoad而不是DOM元素的contentWindow。

<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;

?>

哪個適合我。

試試這個

<?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>";

?>

您的問題與代碼的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中顯示的第一個鏈接之一 看到這部分:

表示iframe內容的窗口對象是加載到iframe中的頁面的屬性。 為了使包含頁面以任何有意義的方式訪問iframe的窗口對象,包含頁面的域和iframe頁面必須相同(細節)。

這意味着,只有在從同一域加載內容時才能訪問contentWindow。

檢查這個SO問題的答案。

Ruben-J是對的,在html iframe中使用onload,它更容易,據我所知不能用php完成,嵌入javascript或不

你確定它在HTML文件中有效嗎? 你測試過嗎?

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

試試看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM