我有一个返回javascript的控制器动作。返回的javascript类似于document.write(...);
。
使用<script type="text/javascript" src="http://example.com/javascript"></script>
问题是javascript在被其他域接收后不会执行。
CORS必须是原因。但如何克服它。我在application.rb
中设置了机架/ corsconfig.middleware.insert_before 0, "Rack::Cors" do
allow do
origins '*'
resource '/javascript*', :headers => :any, :methods => [:get, :post, :options]
resource '/assets/*', :headers => :any, :methods => [:get, :options]
resource '/public/*', :headers => :any, :methods => [:get, :options]
end
end
但是在脚本标记中使用src需要javascript时似乎没有影响。无法从响应中找到Access-Control-Allow-Origin标头。
我还在服务于javascript的控制器中添加了一个before_filter。 before_filter在响应中添加标头Access-Control-Allow-Origin: "*"
。这次在使用firebug观察请求时从响应中找到标题,但是javascript仍未执行。
如何在要求的任何网页上加载和执行javascript?
所有相关代码:
在另一个域
<script type="text/javascript" src="https://example.com/javascript"></script>
我的控制器
class JavascriptController < ApplicationController
layout :false
def javascript
end
end
我的观点app / views / javascript / javascript.js.erb
alert("foo");
在另一个域上,如果我用firebug监视网络,我可以看到提取警报但不会被执行。页面呈现也会停止到脚本标记。脚本标记下方的任何内容都不会呈现,但页面加载完成。
有趣的是,无论如何,
如果在其他域上动态添加脚本标记,则会加载javascript并正确执行。如果有人可以解释原因,那将是一个可以接受的答案。
<script type="text/javascript">
document.write('\x3Cscript type="text/javascript" src="http://example.com/javascript">\x3C/script>');
</script>