代码之家  ›  专栏  ›  技术社区  ›  Christian

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

  •  -8
  • Christian  · 技术社区  · 14 年前

    一个有严重缺陷和智力低下的软件名为“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 狙击手。这将完全消除所有Ajax HTML,除非我禁用/删除javascript,这是一个巨大的否。

    修复

    我需要逐步替换文本/代码,使其看起来像:

    <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>
    

    澄清

    乔姆拉的爱人,别靠近这个话题。我现在想活活烧死一个乔姆拉·德夫。

    生成的代码(document.write)完全是Joomla所做的……没有插件、组件或任何东西。

    3 回复  |  直到 12 年前
        1
  •  6
  •   CharlesLeaf    14 年前

    我个人不会使用Joomla,如果不得不这样做的话,我可能会去寻找代码来找到那段代码,然后用我的激光枪摧毁它。

    但是,一个快速而肮脏的解决方案可能是 output buffering 在PHP中,您可以使用它捕获页面的全部内容,在其中发挥您的魔力,然后将其输出到浏览器。因此,在您的情况下,您可以使用它来查找/替换/删除文档。

    我建议这样做吗?不,但是如果你真的不能接触到生成的代码(我也不知道,所以相信你的判断),你就没有很多选择了。

        2
  •  12
  •   Jimmie Clark    14 年前

    一种方法是在文件夹中以.js结尾的所有文件上使用程序员记事本2进行查找和替换。这可能有助于完成 除非我禁用/删除javascript,这是一个巨大的否。

        3
  •  8
  •   bobince    14 年前

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

    但是,您不能加载 <script> 内容是用 内层HTML / html() )jQuery load() 试图解决一些问题,但它根本上被打破了,甚至 之前 与…有关的问题 文件编写 (这确实很肮脏)。

    您可以尝试将内容写入 内层HTML 挑选出 script 元素,用空的分隔符替换它们,以及 eval() 他们的文本(这是 加载() 尝试去做,但不是真的成功),用 文件编写 重写以将已完成的输出抛出到该分区,但这将是混乱和不可靠的。我不知道您的用例是什么,但几乎可以肯定有一种比这更好的方法。