Javascript用jquery修补程序替换document.write(ln)

时间:2010-09-30 09:35:10

标签: javascript jquery joomla

一个名为“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正在做的......没有插件,组件或任何东西。

3 个答案:

答案 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。

我建议这种做法吗?不,但如果你真的无法触及生成的代码(我不知道,所以相信你的判断),你就没有多少选择。