跨网站嵌入网页控件 - 使用IFrames / Javascript

时间:2009-06-23 19:42:20

标签: javascript iframe

我只是想澄清一下。

假设我有一个小网页表单,一个'小部件',如果你愿意,它可以获取数据,对它进行一些客户端验证或其他AJAX-y废话,点击按钮会指向另一个页面。

如果我希望这是一个'可嵌入'组件,那么其他人可以将其粘贴在他们的网站上,我是否仅限于将其封装在iframe中?

对于我在iframe中能做什么和不能做什么都有限制?

例如,将您带到另一个页面的按钮 - 这会在iframe中加载内容吗?那么它需要与iframe一起存在吗?

最后,如果用户点击的按钮将他们带到https页面以验证信用卡详细信息,是否有任何特定的安全措施可以阻止这种情况发生?

编辑:有关我所了解的示例,请考虑在网页上嵌入googlemaps或multimap。

编辑编辑:好的,我想我明白了。

有两种方式。

One - 嵌入IFrame,但这是有限的。

两个 - 创建一个Javascript API,并要求消费者链接到此。但对于消费者和创作者来说,这都复杂得多。

我做对了吗?

由于 邓肯

4 个答案:

答案 0 :(得分:2)

这两种方法都有加分。我是一个,不会在我的页面上使用另一个人的Javascript,除非我绝对肯定我可以信任来源。制作提交页面上所有输入框值的恶意脚本并不难。如果您不需要访问页面内容,那么使用iframe将是最佳选择。

可以“告诉”按钮和链接使用目标属性导航顶部或父框架,如下所示:

<a href="http://some.url/with/a/page" target="_top">This is a link</a>
<form action="http://some.url/with/a/page" target="_parent"><button type="submit">This is a button</button></form>

在这种情况下,由于您正在离开托管页面,因此不会应用同源策略。

在类似的情况下,小部件通常是放在页面上的iframe。 iGoogle和Windows Live小工具(据我所知)在iframe中托管,并且有很好的理由 - 安全性。

答案 1 :(得分:2)

如果您使用的是AJAX,我假设您有一个用C#或Java或某种OO语言编写的服务器。 只有语法会有所不同才是真正重要的。

无论哪种方式,我都会建议不要使用iFrame方法。 它将打开方式太多的漏洞或问题,如Http与Https(或反之亦然)在iFrame中将显示混合内容警告。

那你做什么?

  1. 对远程站点进行服务器端调用
  2. 在服务器上正确解析响应
  3. 通过AJAX返回您需要的内容
  4. 向用户显示返回的内容
  5. 您知道如何进行AJAX只需向远程站点添加服务器端调用。

    爪哇:

    URL url = new URL("http://www.WEBSITE.com");
    URLConnection conn = url.openConnection();
    

    C#:

    HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.WEBSITE.com");
    WebResponse res = req.GetResponse();
    

答案 2 :(得分:1)

我认为您希望尽可能避免使用内联框架。虽然它们有时很有用,但它们可能会导致导航和书签问题。一般来说,如果你可以采用其他方式而不是iframe,那就是更好的方法。

鉴于您制作了一个AJAX引用,Javascript指针可能是最好的选择,即嵌入您需要在脚本标记中执行的操作。请注意,这就是Google嵌入Google Analytics和Google Ads等内容的方式。它还有一个好处,也可以从您托管的URL中进行拉取,因此您可以更新代码并在所有使用它的网页中“激活”它。 (Google通常也会使用版本号,因此他们在进行更改时不会切换每个人。)

重新信用卡方案,Javascript受“同源政策”的约束。有关说明,请参阅http://en.wikipedia.org/wiki/Same_origin_policy

已添加:Google地图以相同的方式工作,并提供一些警告,例如明确指出使用该代码的用户/网站密钥。

答案 3 :(得分:0)

使用像jQuery这样的东西,为你的组件创建一个“插件”,只有一种方式,只是一个想法,但如果你想与其他人分享组件使用这是可以做的事情之一