我正在将.php文件加载到我创建的div中。 我可以成功地将文件加载到div中,除了javascript之外一切正常。 当我在浏览器中测试文件时,javascript可以正常工作,但是当它被注入我的div时就不行了。
的index.php
<?php
$filename = $_GET["filename"];
if($filename != ""){
$fileData = file_get_contents($filename);
$fileData = trim($fileData);
$fileData = str_replace("\n", "", $fileData);
$fileData = str_replace("\r", "", $fileData);
echo $fileData;
die;
}?>
<body>
<script>
function LoadFile(filename, javascriptDiv){
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200){
javascriptDiv.innerHTML = xmlhttp.responseText;
}
}
xmlhttp.open("GET","index.php?filename="+filename,true);
xmlhttp.send();
}
var javascriptDiv = document.createElement('div');
javascriptDiv.setAttribute('id', 'javascriptDiv');
javascriptDiv.style.position = 'absolute';
javascriptDiv.style.top = 50;
javascriptDiv.style.left = 50;
javascriptDiv.style.height = 200;
javascriptDiv.style.width = 300;
javascriptDiv.style.background = '#CCCCCC'; //so we can see that the DIV was created
LoadFile('http://127.0.0.1/Debug/test.php', javascriptDiv);
document.body.appendChild(javascriptDiv); //Display the Window
</script>
</body>
test.php &lt; - 我正在加载到div中的文件
Plain text works
<?php echo "<br>php works <br>"; ?>
<a>html works</a><br>
<script>
function Test(){
alert('javascript works');
}
</script>
<input type="button" value="Test Javascript" onclick="Test()"/>
以下是我网站上的内容。 index.php
以下是test.php文件的直接链接 test.php
我需要在不改变test.php文件的情况下使用它。
答案 0 :(得分:0)
当您从AJAX中提取内容时,是否可以解析您包含的任何脚本标记[从我的经验来看,它们非常罕见]
我不建议使用AJAX获取明文/ html,而是建议获取JSON编码信息,然后适当地解析返回的JSON,例如。
$html=<<<EOT
<input type="button" value="Test Javascript" onclick="Test()"/>
EOT;
$js=<<<EOT
function Test(){
alert('javascript works');
}
EOT;
echo json_encode(array('html'=>$html,'js'=>$js));
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200){
try{
respJSON = new Object(xmlhttp.responseText);
javascriptDiv.innerHTML=respJSON.html;
eval(respJSON.js);
}catch (e){
//!!!
}
}
}
答案 1 :(得分:0)
我认为你可以在父文档中定义Test函数,或者只是这样:
<input type="button" value="Test Javascript" onclick="alert('javascript works');"/>
在您的子文档中。
答案 2 :(得分:0)
不,你不能用延迟加载来评估标签。
一般来说,我认为允许用户运行自定义JavaScript的想法是一个开放的漏洞。我不确切地知道你想要实现什么以及为什么,但你最好自己创建一组函数并发布一个简单的公共API(例如,获取一个灯箱,为你的元素添加一个'lightbox'类或者那种事情。)
或者,您可以获取标记的内容并运行eval()。但同样,这很危险。
This page很好地解释了您可以用来实现这一目标的不同方法。当然,所有人都假设您正在运行自己的代码而不是某些用户代码。
答案 3 :(得分:0)
使用document.createElement或创建隐藏标记附加任何带有display none的HTML标记,然后将其附加到您的文件中。
像这样:
var d = document.createElement("hidden");
div.innerHTML = d + content;
我测试它会正常工作。