一个名为“Joomla”的严重缺陷和延迟的软件给了我一般的头痛。
示例代码
我有以下代码:
<!-- .... -->
<div id="abc"><!----></div>
<script type="text/javascript">
jQuery.get(url, function(data){
jQuery('#abc').html(data);
}, 'data');
</script>
<!-- .... -->
我从该网址获取此代码:
<!-- .... -->
<script type="text/javascript">
document.write('<span');
// perhaps write classes
document.write('>');
// and the rest of the code
</script>
<!-- .... -->
问题
通过使用document.write
snipets,Joomla正在现代。这完全抹杀了任何AJAX html,除非我禁用/删除javascript,这是一个巨大的NO。
修复
我需要逐步替换文本/代码,如下所示:
<span id="ob1"><!----></span>
<script type="text/javascript">
_ob_begin(1);
_ob_write(1, '<span');
// perhaps write classes
_ob_write(1, '>');
// and the rest of the code
_ob_end(1);
</script>
澄清
Joomla爱好者,不要接近这个话题。我觉得现在正在燃烧一个joomla dev。
生成的代码(document.write)严格来说是joomla正在做的......没有插件,组件或任何东西。
答案 0 :(得分:12)
一种方法是使用Programmers Notepad 2对该文件夹中以.js结尾的所有文件进行查找和替换。这可能有助于实现 “除非我禁用/删除javascript,这是一个巨大的NO。”
答案 1 :(得分:8)
可以使用您自己的缓冲输出文本的函数覆盖document.write
,并在延迟后将其写入某个元素的innerHTML
。这并不完全可靠,但它可以捕捉到许多常见的情况。
但是,您无法通过<script>
/ innerHTML
编写内容来加载html()
个内容。 jQuery的load()
尝试解决一些问题,但它在根本上被打破了,甚至之前 document.write
的问题(实际上是肮脏的)。
您可以尝试将内容写入innerHTML
,挑选script
元素,将其替换为空div,然后eval()
使用load()
document.write
{{1}尝试做,而不是真正成功),重写{{1}}以将完成的输出抛给div。但它会变得混乱和不可靠。我不知道你的用例是什么,但几乎肯定有比这更好的方法。
答案 2 :(得分:6)
我个人不会使用Joomla,如果我不得不去寻找那段代码并用我的激光枪摧毁它。
但是,在PHP中快速'n'脏修复可能是output buffering
,您可以使用它来捕获页面的全部内容,在那里做你的魔术,然后将其输出到浏览器。因此,在您的情况下,您可以使用它来查找/替换/删除document.write。
我建议这种做法吗?不,但如果你真的无法触及生成的代码(我不知道,所以相信你的判断),你就没有多少选择。