如何重写Javascript代码引用的URL?

如何重写Javascript代码引用的URL?,javascript,html,Javascript,Html,这是我的一个广受欢迎且技术上具有挑战性的问题的后续 概括地说:我想向客户演示我的技术,而不实际修改他们的实时网站(例如,演示Stackoverflow财务奖励的想法,而不修改实时网站)。本质上,我正在尝试创建的服务器端版本 我实现了镜像,如下所示: 请求进入http://myserver.com/forward?uri=[远程] 我的服务器打开一个连接到[remote],提取数据并将其正文/标题返回给来自#1的请求 我选择这种语法是因为我需要处理来自多个域的请求(也就是说,如果stackover

这是我的一个广受欢迎且技术上具有挑战性的问题的后续

概括地说:我想向客户演示我的技术,而不实际修改他们的实时网站(例如,演示Stackoverflow财务奖励的想法,而不修改实时网站)。本质上,我正在尝试创建的服务器端版本

我实现了镜像,如下所示:

  • 请求进入
    http://myserver.com/forward?uri=[远程]
  • 我的服务器打开一个连接到
    [remote]
    ,提取数据并将其正文/标题返回给来自#1的请求
  • 我选择这种语法是因为我需要处理来自多个域的请求(也就是说,如果
    stackoverflow.com
    链接到
    meta.stackoverflow.com
    我需要处理来自同一转发服务器的两个域)

    我已经设法重写了HTML和CSS文件中的链接,使它们与我的服务器相关。最后一个障碍是重写Javascript文件引用的URL

    以编程方式重写他人Javascript代码引用的URL的最佳方法是什么?这在技术上可行吗


    讨论 我将给你举一个我面临的技术障碍的例子。比如说。他们在页面上嵌入Flash元素,但不是直接嵌入
    ,而是使用Javascript来
    document.write()
    包含URL的
    标记

    第一次尝试
  • 用于侦听DOM更改事件。不要试图在Javascript代码中重写URL,而是等待它修改DOM并动态重写URL
  • 使用截获所有XmlHttpRequest请求
  • 理想情况下,我们希望在呈现DOM更改之前拦截这些更改,以便在我们有机会重写它们之前,浏览器不会请求URL

    相关资源:

    第二次尝试 服务器端解决方案将不起作用。即使我可以重写所有DOM URL,我也看到了一个示例,其中嵌入式Flash应用程序引用存储在Javascript变量中的URL。由于Flash应用程序是不透明的,因此没有编程方法检测这些变量是否表示URL


    接下来,我计划尝试一种客户端解决方案。我将在一个框架中加载原始网站,并在第二个(隐藏)框架中使用Javascript操作其内容。我希望能够注入新的DOM元素(演示我的产品),而不必重写现有的元素。

    非常有挑战性和有趣的任务。我首先将javascript文件保存在我的服务器上,并从提供的HTML中引用它们。然后我会在文件中找到URL(使用正则表达式或其他东西),并用想要的值替换它。我知道它不是很快,也不是很有活力,但我相信它会更容易实现


    希望我能帮忙

    回答我自己的问题

    经过大量研究,我发现这种技术效果最好:


    换句话说,似乎没有重写链接的通用算法。手动修补它们的工作量并不像您预期的那么大。

    我希望您理解,您无法修复所有可能通过javascript构建的URL,因为其中一些URL可能是从其他组件组合而成的字符串,您可能无法通过扫描代码来识别。@jfriend00您是对的,这就是为什么我认为拦截DOM更改可能是一种更可靠的方法。让我们从顶部开始,为什么不想首先修改live页面?此外,什么是理想的最终产品,您的技术应该做什么,客户应该如何看待它?您想显示页面的图像、实时可浏览视图或其他内容吗?@Nit,我计划向客户发送一个链接,指向修改站点的实时可浏览视图。如果客户喜欢他们看到的内容,他们将修改实时站点。我们的技术人员需要做的唯一一件事就是在视图中的何处配置注入HTML按钮(例如,将Paypal按钮注入Stackoverflow站点)。另外,您是否仍然确定应该删除
    demo
    html注入
    标记?考虑到我刚才解释的要求,这两个问题听起来都很相关。请不要误会,但这个问题的关键是找出如何“在文件中查找URL”。意思是,这个答案并没有真正回答我的问题:)明白了。你想让我把它拿走吗?你认为它会让人读起来感到困惑吗?是的,请。没有答案的问题往往会得到搜索引擎更多的关注。