我有一个Rails应用程序正在使用两个想要用JavaScript进行通信的子域。什么是最有效地设置document.domain = mydomain.com
的干燥方式?
localhost
的开发或测试环境中,这不应该是一个问题。条件1
让我想到我要么依赖于从location.host
解析根域的正则表达式,要么在erb
中进行切换。
条件2
让我觉得最好写一次并将其放入资产管道并在必要时包含它。
创建一个类似domain_setter.js.erb
的文件(下面的内容),将其添加到预编译列表,并将其包含在所有必要的位置(清单中的\\= require domain_setter
或没有清单的页面的javascript_include_tag 'domain_setter'
)
<%- if Rails.env.production? %>
document.domain = 'mydomain.com';
<%- end %>
此解决方案更具动态性,不需要对域进行硬编码。仍然不是最好的,但它的工作...... 主要是: - /
(function() {
var domain = /^(?:https?\:\/\/)?.*?([^.]+\.[^.]+?)(?:\:\d+)?$/.exec(location.host);
if (domain == null) {
document.domain = 'localhost';
} else {
document.domain = domain[1];
}
})();
设置多个页面'document.domain
使用Rails的干燥方法是什么?
答案 0 :(得分:0)
我认为您正在寻找跨源资源共享(CORS)。这允许javascript在不同的域中发出AJAX $.get/post
请求。
这是一个可以帮助您入门的rails库:https://github.com/cyu/rack-cors#rails
您需要将origins
属性设置为yoursubdomain.herokuapp.com