从Rails设置document.domain的DRY方式

我有一个Rails应用程序,它使用两个想要用JavaScript进行通信的子域。 什么是最有效地设置document.domain = mydomain.com

使它不那么直接的条件

  1. 在域为localhost的开发或测试环境中,这不应该是一个问题。
  2. 这也需要在不加载主JavaScript文件的某些页面上设置

条件1让我认为我要么依赖于一个正在解析location.host的根域的正则表达式,要么在erb进行切换。

条件2让我觉得最好写一次并把它放在资产管道中并在必要时包含它。

最佳潜在解决方案

创建一个类似domain_setter.js.erb的文件(下面的内容),将其添加到预编译列表,并将其包含在所有必要的位置(清单中的\\= require domain_setter或没有清单的页面的javascript_include_tag 'domain_setter' )。

  document.domain = 'mydomain.com';  

更新当前解决方案

此解决方案更具动态性,不需要对域进行硬编码。 仍然不是最好的,但它的工作…… 主要是 : – /

 (function() { var domain = /^(?:https?\:\/\/)?.*?([^.]+\.[^.]+?)(?:\:\d+)?$/.exec(location.host); if (domain == null) { document.domain = 'localhost'; } else { document.domain = domain[1]; } })(); 

TL;博士

使用Rails设置多个页面的document.domain的DRY方法是什么?

我想你正在寻找跨源资源共享(CORS)。 这允许javascript跨不同域发出AJAX $.get/post请求。

这是一个可以帮助您入门的rails库: https : //github.com/cyu/rack-cors#rails

您需要将yoursubdomain.herokuapp.com属性设置为yoursubdomain.herokuapp.com