PHP中的JavaScript不工作(document.getElementById)

PHP中的JavaScript不工作(document.getElementById),php,javascript,iframe,document,getelementbyid,Php,Javascript,Iframe,Document,Getelementbyid,有些奇怪的事情正在发生,但我似乎无法让JavaScript代码document.getElementById在PHP内部工作 例如,将下面的PHP代码(如下)加载到PHP文件中并运行它,是否没有JavaScript警报?但是,如果复制PHP响应(或打印)的源代码并将其作为HTML文件运行,会出现JavaScript警报吗?因此,在PHP标记内部创建的任何元素都不会在JavaScript中运行,即使JavaScript被保留在PHP标记之外 以下是PHP演示代码: <?php print

有些奇怪的事情正在发生,但我似乎无法让JavaScript代码
document.getElementById
在PHP内部工作

例如,将下面的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>
";
?>
我的问题是,在HTML中,这段代码运行良好,警报被称为。。。。在PHP中,代码不起作用,并且从不调用警报。。。PHP处理
document.getElementById
的方式有问题,
.contentWindow.onload
试试这个

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

?>

您确定它在HTML文件中有效吗?你测试过了吗

document.getElementById('my_id')。onload=function(){ 警报(“已加载内容”); }


试试看,你的问题与代码的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 id='my_id' onload='ShowAlert();' name='my_id' src='http://www.php.com/'></iframe>   

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

函数ShowAlert(){
警报(“已加载内容”);
}
或者如果你想回应它

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

函数显示(){
警报(“加载”);
}

它失败了,因为在加载文档之前调用了
document.getElementById
,如果要像这样附加框架
onload
处理程序,则需要在主体
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>

函数加载(){
document.getElementById('my_id')。contentWindow.onload=function(){
警报(“已加载内容”);
}
}
更好地绘制框架,如使用
domready
事件。将所有javascript代码封装在
domready
处理程序中是相当标准的

其他人提到的另一种方法是,通过将frames onload处理程序放入html中,直接附加它


PHP在这里没有任何作用。

Ruben-J是正确的,在html iframe中使用onload,这更容易,而且据我所知,无论是否嵌入javascript,都无法使用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>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

document.getElementById('my_id')。onload=function(){
警报(“已加载内容”);
}
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
因此在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代码?我不能让它与PHP一起工作,它与HTML一起工作,就像你在上面建议的那样。这就是我在上面发布的不起作用的代码?(除了脚本类型周围的括号应该是撇号,这样代码才能正常工作)你的代码不正常工作,所以你把这个html放在php标记中,它工作在一个html文件中,我检查了它。。。你发布的代码只是“onload”而不是“contentWindow.onload”,这意味着它将在iFrame本身加载时运行,而不是iFrame内部的内容(这对我发布的示例并不重要,但对我的整个代码来说,这一部分很重要,哈哈),我认为这在纯HTML中也不起作用,因为问题应该是同一来源策略,因为请求是跨域的。在控制台中尝试document.getElementById('my_id').contentDocument,您应该会看到错误。“因此,在PHP标记内部创建的任何元素都不会在javascript中运行,即使javascript被保留在PHP标记之外?”-浏览器不知道或不关心响应的哪一部分是在
中动态生成的,但当代码不在PHP中时,代码工作正常,当代码在PHP中时,代码不工作。。。如果您通过HTML运行此代码,则在加载内容时会发出警报,我已经对此进行了测试和验证(使用来自不同服务器的内容),您也可以对其进行测试!问题出在PHP中,因为当我运行PHP代码时,我从未收到javascript警报,但如果我将PHP文件中的源代码复制并粘贴到HTML文档中,然后突然再次运行,则会调用javascript警报!:哦,太迷人了,我不知道为什么会发生这种事,哈哈!我做了测试。当域是外部的时,我没有收到警报(既不是来自PHP,也不是来自HTML输出)。这太奇怪了,太疯狂了!我收到HTML警报,你在使用Safari吗?还有,你是使用HTML文件的源代码还是只是修改了PHP代码?很好,我不知道为什么你的工作,我的工作没有我看不出有什么错。。。。但你的工作仍然有效!谢谢你!Onload eventhandler可能已附加到iframe的late。在元素上定义它是唯一的区别。不过,投赞成票也不错……)如果在定义事件之前没有定义事件处理函数,Javascript通常无法调用这些函数。在这种情况下,onload失败,因为它在定义handler时可能没有检测到函数定义。这是因为函数是在iframe onload事件上调用的,父窗口可以访问该事件。当iframe被加载时,警报将被执行,而不是当里面的内容被加载时。我强烈不同意这一点。你不应该只为你可能需要的1个或2个函数使用一个框架来填满你的页面。显然,如果你没有使用框架的其余部分,那么可能像domready()这样的东西是最好的选择。但是,如果你正在编写大量的js,框架是一个非常好的主意。jquery不是一个框架。绑定到onload不是一个好主意。正确的DOMready处理实现只需要大约10行代码。建议的domready代码似乎也可以。
<iframe id='id' onload='display();' name='my_id' src='www.test.com'></iframe>   

<script type='text/javascript'>
function display(){
    alert('Loading');
}
</script>
<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>
<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
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;

?>