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

Chr*_*ian -8 javascript jquery joomla

一个名为"Joomla"的严重缺陷和延迟的软件给了我一般的头痛.

示例代码

我有以下代码:

<!-- .... -->
<div id="abc"><!----></div>
<script type="text/javascript">
    jQuery.get(url, function(data){
        jQuery('#abc').html(data);
    }, 'data');
</script>
<!-- .... -->
Run Code Online (Sandbox Code Playgroud)

我从该网址获取此代码:

<!-- .... -->
<script type="text/javascript">
   document.write('<span');
   // perhaps write classes
   document.write('>');
   // and the rest of the code
</script>
<!-- .... -->
Run Code Online (Sandbox Code Playgroud)

问题

Joomla 使用snipets 是现代document.write.这完全抹杀了任何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>
Run Code Online (Sandbox Code Playgroud)

澄清

Joomla爱好者,不要接近这个话题.我觉得现在正在燃烧一个joomla dev.

生成的代码(document.write)是严格的joomla正在做...没有插件,组件或任何东西.

Jim*_*ark 12

一种方法是使用Programmers Notepad 2对该文件夹中以.js结尾的所有文件进行查找和替换.这可能有助于实现"除非我禁用/删除javascript,这是一个巨大的NO."


bob*_*nce 8

可以document.write使用自己的函数覆盖缓冲输出文本,并在延迟后将其写入某个元素innerHTML.这不是完全可靠的,但它可以捕获许多常见情况.

但是,您无法<script>通过使用innerHTML/ html())编写内容来加载内容.jQuery load()试图解决一些问题,但它基本上已经被打破,甚至问题出现之前document.write(实际上是肮脏的).

您可以尝试编写内容innerHTML,挑选script元素,用空div替换它们,以及eval()它们的文本(这是load()尝试做的事情,而不是真正成功),document.write重写将完成的输出抛给div.但它会变得混乱和不可靠.我不知道你的用例是什么,但几乎肯定有比这更好的方法.


Cha*_*eaf 6

我个人不会使用Joomla,如果我不得不去寻找代码来寻找那段代码并用我的激光枪摧毁它.

但是,一个快速的'n'脏修复可能output buffering在PHP中,您可以使用它来捕获页面的全部内容,在那里做你的魔术,然后将其输出到浏览器.因此,在您的情况下,您可以使用它来查找/替换/删除document.write.

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