从Rails设置document.domain的DRY方式
我有一个Rails应用程序,它使用两个想要用JavaScript进行通信的子域。 什么是最有效地设置document.domain = mydomain.com
?
使它不那么直接的条件
- 在域为
localhost
的开发或测试环境中,这不应该是一个问题。 - 这也需要在不加载主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