iframe或JS将Rails嵌入第三方网站?

时间:2016-07-18 14:10:14

标签: javascript ruby-on-rails iframe

我想为Rails应用创建可嵌入的小部件,允许用户从外部网站与应用互动。

我已经准备好尝试使用iframe来实现这一目标。但后来我发现了一些论坛响应似乎表明iframe不是实现这一目标的最佳方式,而是使用JS来嵌入HTML元素。这让我感到惊讶 - 我认为iframe只是因为CSS和脚本的隔离而成为明显的赢家。

那么,在第三方网站中嵌入(有限)应用功能的最佳方式是什么?此交互仅限于登录和单个简单表单。 JS的iframe嵌入了最佳方式吗?作为一个附带问题,这两种方法都有安全问题需要注意吗?

2 个答案:

答案 0 :(得分:2)

我认为使用iframe很难吸收。这不是整个网站的感觉,它就像是另一个网站,大多数风格不匹配,或者你有一个滚动条或响应式布局不适用。所以这里有一个pro / con列表:

iframe PRO:

  • 请求不是跨站点来源(很可能更安全)
  • “sandbox”javascript(无冲突)

iframe CON:

  • 样式指南
  • 历史记录未发生变化(例如,如果您使用GET提交表单,则无法粘贴该网址并将其发送给朋友)

js PRO:

  • 完全控制导航(您可以使用$.load覆盖链接点击次数等。)
  • 更改浏览器历史记录的能力(历史记录API,请参阅MDN)
  • 顺利处理html组件
  • 样式是自动继承的

js CON:

我写了一个小的rails插件,它允许你将你的rails应用程序作为js框架嵌入另一个(它仍然真的是测试版):Sending multipart/formdata with jQuery.ajax。该插件处理大多数js问题,如链接/表单事件,并写入浏览器历史记录。

所以..如果你需要运行一个应该真正嵌入到其他网站上的商店这样的网站的应用程序,我会使用js嵌入。

如果您创建要像https://github.com/Elektron1c97/better_frame那样分享的自定义项目,则可能需要使用iframe。

答案 1 :(得分:1)

如果您希望第三方网站对与您的小部件的交互做出反应,那么您绝对应该使用javascript。虽然可以通过iframe在不同域之间传递消息,但它并不是最方便使用的。见https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

至于使用javascript,您只需要求您的用户嵌入一个可呈现您的小部件的javascript文件。要绕过任何CORS问题,您的窗口小部件应与支持JSONP响应的API进行交互。