首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Konacha将“iframe”添加到以编程方式设置src属性的映像urls中。

Konacha将“iframe”添加到以编程方式设置src属性的映像urls中。
EN

Stack Overflow用户
提问于 2013-06-24 15:04:04
回答 1查看 451关注 0票数 1

我刚刚设法让Konacha运行我的客户端集成测试。

Konacha在iframe中运行ember应用程序进行测试。在我的应用程序中,我根据用户操作以编程方式创建img元素。当我设置'src‘属性时,用于从服务器获取图像文件的结果url中添加了'/iframe’部分,如下所示:

代码语言:javascript
复制
http://0.0.0.0:3500/iframe/assets/regensberg/regensberg_1.jpg

它提供404 (未找到)

当我从常规的rails开发服务器提供服务时,代码确实正确地运行。

代码语言:javascript
复制
rails s

正确的网址应为:

代码语言:javascript
复制
http://0.0.0.0:3500/assets/regensberg/regensberg_1.jpg

知道它为什么要这样做吗?如何绕过它?

*编辑*

查看Konacha代码,我发现konacha/config/routeres.rb中定义的路由

代码语言:javascript
复制
Konacha::Engine.routes.draw do
  get '/iframe/*name' => 'specs#iframe', :format => false, :as => :iframe
  root :to => 'specs#parent'
  get '*path' => 'specs#parent', :format => false
end

我们看到这个请求被传递到规范控制器中的iframe方法。

konacha/app/控制器/konacha/specs_ controller.rb向我们展示了404消息的来源。

代码语言:javascript
复制
module Konacha
  class SpecsController < ActionController::Base
    rescue_from Konacha::Spec::NotFound do
      render :text => "Not found", :status => 404
    end

    def parent
      @run_mode = params.fetch(:mode, Konacha.mode).to_s.inquiry
      @specs = Konacha::Spec.all(params[:path])
    end

    def iframe
      @spec = Konacha::Spec.find_by_name(params[:name])
      @stylesheets = Konacha::Engine.config.konacha.stylesheets
    end
  end
end

查看模型,我们看到Spec::NotFound来自何处:

代码语言:javascript
复制
module Konacha
  class Spec
    class NotFound < StandardError
    end

    def self.all(path = nil)
      paths = Konacha.spec_paths
      paths = ENV["SPEC"].split(",") if ENV["SPEC"]
      paths = paths.map { |p| new(p) }
      if path.present?
        paths = paths.select { |s| s.path.starts_with?(path) }.presence or raise NotFound
      end
      paths
    end

    def self.find_by_name(name)
      all.find { |s| s.asset_name == name } or raise NotFound
    end

    attr_accessor :path

    def initialize(path)
      @path = path
    end

    def asset_name
      path.sub(/(\.js|\.coffee).*/, '')
    end
  end
end

有了上面的信息,当我们将get请求发送到包含'iframe‘的路径时,我们会看到为什么我们会得到错误消息而不是图像文件。那么,为什么URL包含“iframe”呢?

查看父视图代码:

代码语言:javascript
复制
<!doctype html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <title>Konacha Tests</title>
    <%= stylesheet_link_tag "konacha", :debug => false %>
    <%= javascript_include_tag "mocha", "konacha/parent", :debug => false %>
    <%= javascript_include_tag("konacha/runner", :debug => false) if @run_mode.runner? %>
  </head>
  <body>
    <% @specs.each do |spec| %>
      <%= content_tag :iframe, "", :src => iframe_path(spec.asset_name), :class => "test-context", "data-path" => spec.path %>
    <% end %>
    <div id="mocha"></div>
  </body>
</html>

我们看到iframe的src是iframe路径,从上面的路径应该是:

代码语言:javascript
复制
 0.0.0.0:3500/iframe/#{spec.assetName}

我设置img src参数如下:

代码语言:javascript
复制
img.src = "assets/" + filename

在提出请求之前,浏览器会将"0.0.0.0:3500/iframe/“添加到此。这似乎引起了真正的麻烦。如何防止iframe将此部分包含在基URL中?

* Finish编辑*

顺便问一下,一个业力足够高的人(>1500)能创造一个科纳查标记吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-25 18:19:23

assets/dir/filename.jpg是一个相对路径;它是相对于生成http://0.0.0.0:3500/iframe/assets/dir/filename.jpg的页面的基本URL (即http://0.0.0.0:3500/iframe/ )进行解释的。您需要使用绝对路径/assets/dir/filename.jpg,并使用前导斜杠。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17278732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档