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

时间:2014-03-09 07:16:43

标签: javascript html

这是我对流行且技术上具有挑战性的HTML injection into someone else's website?问题的跟进。

回顾一下:我想向客户演示我的技术,而无需实际修改他们的实时网站(例如,在不修改实时网站的情况下演示Stackoverflow财务奖励的想法)。基本上,我正在尝试创建Greasemonkey的服务器端版本。

我按如下方式实现了镜像:

  1. 请求进入http://myserver.com/forward?uri=[remote]
  2. 我的服务器打开与[remote]的连接,下拉数据并将其正文/标题返回到来自#1的请求。
  3. 我选择了这种语法,因为我需要处理来自多个域的请求(意味着,如果stackoverflow.com链接到meta.stackoverflow.com我需要处理来自同一转发服务器的两个域。)

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

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


    讨论

    我将举例说明我面临的技术障碍。以http://www.honda.com/为例。他们在页面上嵌入了Flash元素,但不是直接嵌入<object>,而是使用Javascript来document.write()包含该网址的<object>标记。

    首次尝试

    1. 使用https://stackoverflow.com/a/14570614/14731侦听DOM更改事件。而不是尝试重写Javascript代码中的URL,而是等待它修改DOM并动态重写URL。
    2. 使用https://stackoverflow.com/a/629782/14731
    3. 拦截所有XmlHttpRequest请求

      理想情况下,我们希望在渲染之前拦截DOM更改,因此浏览器在我们有机会重写之前不会请求URL。

      相关资源:

      第二次尝试

      服务器端解决方案无效。即使我可以重写所有DOM URL,我也看到了一个嵌入式Flash应用程序引用存储在Javascript变量中的URL的示例。没有编程方法可以检测到这些变量代表URL,因为Flash应用程序是不透明的。

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

2 个答案:

答案 0 :(得分:1)

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

希望我帮忙!

答案 1 :(得分:-1)

回答我自己的问题。

经过大量研究,我发现这种技术效果最好:https://stackoverflow.com/a/23231268/14731

换句话说,似乎没有一种通用算法来重写链接。手工修补它们并不像你期望的那么多。