如何从其他域加载JavaScript

时间:2015-02-11 21:59:48

标签: javascript ruby-on-rails cors

我有一个返回javascript的控制器动作。返回的javascript类似于document.write(...);

使用<script type="text/javascript" src="http://example.com/javascript"></script>

从其他域中需要此javascript

问题是javascript在被其他域接收后不会执行。

CORS必须是原因。但如何克服它。我在application.rb

中设置了机架/ cors
config.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>

0 个答案:

没有答案