【问题标题】:Cross domain content loading with javascript使用 javascript 加载跨域内容
【发布时间】:2011-12-15 17:03:55
【问题描述】:

好的,问题来了:

远程站点需要从其他域中提取复杂的 html 页面内容。 iframe解决方案不够好,因为确定页面高度的问题,IE浏览器不允许跨域ajax。有 JSONP,但需要提供的代码量太复杂,我们还需要提供一些功能。

解决办法:

在服务器端,我们动态生成包含字符串变量中所有复杂 html 内容的 javascript。在远程端,我们只包含对这个脚本的调用,然后我们在页面上放了一个。然后用来自服务变量的内容填充 Div。它可以在所有浏览器上跨域工作,并且内容显示完美:))。

问题:

这种方法有什么问题?为什么网上的任何地方都没有提到这种解决方案?它似乎非常适合为任何类型的小部件和类似内容提供服务,现在我担心其中存在一些重大谬误:)?

请揭穿它:)

【问题讨论】:

  • 它本质上只是一个自制的 JSONP 版本。
  • 嗯,是的。但是通过这种方式,来自远程服务器的整个 html 页面可以与所有 javascript 功能一起提供。我们无法使用 jsonp 实现这一点。
  • "... IE 浏览器不允许跨域 Ajax。" - 好吧,至少其他浏览器允许您这样做.. 哦,等等,他们不要。
  • 嗯,使用 JSONP 可能有些复杂,但我的意思是它利用了与 JSONP 相同的浏览器功能。
  • 他们使用 json 和 jsonp,但您甚至可以通过在响应标头中设置 Access-Control-Allow-Origin = * 来提供 html。

标签: javascript ajax cross-domain


【解决方案1】:

这种方法没有问题。出于安全原因,客户端禁止跨域,但在服务器端您可以随意进行。

这里的区别在于您必须重新加载页面才能查询其他域,然后将其推送到您的页面。所以基本上你可以做到以下几点:

1- 您的 javascript 向其自己的域发出 ajax 请求。 2-在服务器端,您发出跨域请求 3-您打印一些供请求者使用的js/html

在这种情况下,您比直接在客户端执行多一个请求。

【讨论】:

  • 嗯,我明白了。我想我现在甚至可以按需加载带有新内容的附加 javascript,并以这种方式模拟更多的 ajax 调用。酷。
【解决方案2】:

正如 Pointy 所评论的,这与 JSONP 基本相同。请记住,大多数浏览器都会阻止向第三方网站发送 cookie。

【讨论】:

    【解决方案3】:

    只要服务器发送 access-control-allow-origin 响应头,跨域是可能的。示例见链接文章

    http://www.leggetter.co.uk/2010/03/12/making-cross-domain-javascript-requests-using-xmlhttprequest-or-xdomainrequest.html

    【讨论】:

    • 不适用于 IE6 和 7,除非用户手动更改安全设置 :((
    猜你喜欢
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    相关资源
    最近更新 更多