[英]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>
甚至可以更好地domready
像jQuery這樣的框架並使用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.