在外部网页加载完成后添加HTML/JS代码

3

是否有可能加载外部网页,例如 'http://www.google.com',然后在其末尾添加自己的HTML/JS代码(例如运行函数)?肯定有一种方法可以加载外部页面,然后在其后添加自己的代码。就像这样:

<html>

<script>

document.location.href="http://www.google.com/"; //Load external page

function myscript() {
...blahblah
}
</script>

<button onclick="myscript();">Click me</button>

</html>

我希望那个按钮出现在外部页面底部。请不要建议使用php解析方法。我已经尝试通过首先在php中解析页面,然后将自己的脚本附加到其中并按照我在这里描述的方式echo出来: Append HTML to page after redirect 对于简单的页面,它可以工作,没有重定向或者最终的外部页面可以被适当地解析。问题是我无法正确解析外部页面。解析的代码似乎没有从之前的页面(在重定向之前)中获取的代码功能。我需要在不解析/爬取/抓取的情况下完成此操作。
谢谢!
编辑:我已经尝试按Amadan所建议的在iframe中显示外部页面:
<script>

function myscript() {
...blahblah
}
</script>

<iframe src="http://www.google.com/"></iframe>
<button onclick="myscript();">Click me</button>

</html>

然而,在Firefox中它只显示一个空白框,在IE中它会显示:"无法在框架中显示此内容:为了保护您输入到该网站的信息的安全性,此内容的发布者不允许其在框架中显示。"

有什么办法可以绕过这个问题吗?


编辑2:

我已经包含了jquery和跨域脚本(https://github.com/padolsey/jquery.fn/blob/master/cross-domain-ajax/jquery.xdomainajax.js)。这是我现在使用的代码来使用ajax获取内容。我该如何将其展示在网页上?很抱歉,我真的不太懂ajax/jquery!

   function test () {
     $.ajax({
       url: 'http://www.google.com/',
       type: 'GET',
       success: function(res) {
         var content = $(res.responseText).text();
         alert(content);
       }
     });
   }

4
你希望将你的脚本传递到下一个网站?这是一种名为“跨站脚本攻击”的形式:http://en.wikipedia.org/wiki/Cross-site_scripting。 - Zarathuztra
有什么办法可以绕过这个问题吗?即使我知道如何做,我也不会帮你。他们非常清楚地表示不希望你以那种方式使用他们的资源,就像如果我是一名锁匠,我也不会教网上的陌生人如何犯罪(即使他们发誓只用它来打开自己的门)。 - Amadan
你想要添加脚本的页面的URL是什么?我的意思是第一个。 - Youss
阅读有关GreaseMonkey浏览器插件使用的技巧... ;) - TomeeNS
2个回答

5

除非安装浏览器扩展(只适用于安装了您的扩展程序的客户端),否则您无法向您不控制的页面附加任何内容。

您可以将您不控制的页面内容包含在自己的页面中(有两种主要方式:客户端iframe和服务器端拉取),但您似乎并不想这样做。


我可以使用PHP获取另一个页面的内容(我认为这是服务器端拉取),并将其回显到我的HTML页面上,从而在自己的页面中包含我无法控制的页面的内容。但是,如果这个回显包含JS重定向(它确实包含),那么它会离开我的PHP页面,我就不能再回显/打印到页面上,因为它现在是外部的,不再从我的PHP代码运行。 - pauloz1890
1
如果你使用document.location.href,那么这不再是你自己的页面了。你是在告诉浏览器带你去别的地方。 - Zarathuztra
1
是的,这就是我所说的“服务器端拉取”的意思。在这种情况下,您需要重新编写所有链接,以便纠正相对链接并使它们绝对化,或将它们代理到您的脚本中,以便您继续控制。如果有任何链接是在JavaScript中或通过AJAX传递的,那就很难办了。 - Amadan
Amadan,感谢您的帮助。我尝试了您建议的iframe。请参见我原始帖子的编辑。还有其他可以做的吗?或者有没有一种方法强制它在iframe中显示? - pauloz1890
你不能将任何内容附加到你无法控制的页面上 - 为什么会有人想要附加任何他或她不想要的东西呢?要将任何内容附加到文档中,请使用document [html元素id] .innerHTML =“Trolololololo”函数或只需使用document.write("<h1>TRololollollolo</h1>"),document.write("<b><a href='trlololo.htm'>Blah blah</a></b>")。;) - TomeeNS

0
尝试像这样做:

  var html = '';

  $.ajax({
      uri: 'http://ya.ru',
      method: 'POST',
      success: function(data){
          htmlx = data;
      }
  });

关于在变量内操作HTML

var test = $("<div/>");
test.append(html);

test.find(".innertest");

// When I'm ready to append it..

$('#container').append(test);

如果它不能工作,你可以在你的服务器上使用另一个页面来获取远程页面,并使用ajax请求它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接