Electron.js / jQuery UI - 未捕获的ReferenceError:未定义jQuery

时间:2017-09-15 17:47:26

标签: javascript jquery electron

当我开始我的程序时,我收到此消息:

  

未捕获的ReferenceError:jQuery未定义
          在jquery-ui.min.js:6
          在jquery-ui.min.js:6

我不确定我做错了什么,我在index.js中没有使用jQuery或jQuery UI。这是我的HTML文件:

enter image description here

编辑:这是一个Electron.js应用。我已经回答了我自己的问题。

2 个答案:

答案 0 :(得分:3)

除非您首先声明主jQuery库,否则jQuery UI不起作用。如果jQuery没有正确加载,jQuery UI将因你得到的错误而失败。

你有两个声明,但第一个似乎要求正确的文件(jquery.js),但是从错误的路径,所以jQuery没有被加载。如果您要打开浏览器的开发者工具(F12)并查看"网络"选项卡,您很可能会看到文件请求返回时出现404错误。

值得注意的是,您引用的jQuery UI版本依赖于某个版本的jQuery。如果您没有引用正确的jQuery版本,那么也可能导致错误。

如果您确实需要使用jQuery UI,则需要使用此功能(根据您的版本进行调整,并注意多年后仍然需要type=text/javascriptlanguage=javascript。):

<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>

您可以在此处获取正确的内容分发网络(CDN)路径:

但是,如果你没有在页面中使用jQuery或jQuery UI,那么删除这两行。

答案 1 :(得分:1)

我发现了问题。事实证明,jQuery认为它在没有带DOM的窗口的环境中。

来自jQuery.js第17行:

# config/multi_domain.rb
ActionView::PartialRenderer.class_eval do
  def find_template_with_multi_store(path, locals)
    prefixes = path.include?(?/) ? [] : @lookup_context.prefixes

    store_prefixes = prefixes
    store_path     = path

    if @view.respond_to?(:current_store) && @view.current_store && !@view.controller.is_a?(Spree::Admin::BaseController)
      store_prefixes = (store_prefixes.map { |i| i.gsub('spree/', "spree/#{@view.current_store.code}/") } + store_prefixes).uniq unless store_prefixes.nil?
      store_path     = store_path.gsub('spree/', "spree/#{@view.current_store.code}/") unless store_path.nil?
    end

    begin
      @lookup_context.find_template(store_path, store_prefixes, true, locals, @details)
    rescue ::ActionView::MissingTemplate
      @lookup_context.find_template(path, prefixes, true, locals, @details)
    end
  end

  alias_method_chain :find_template, :multi_store
end

ActionView::TemplateRenderer.class_eval do
  def find_template_with_multi_store(name, prefixes = [], partial = false, keys = [], options = {})
    if prefixes.nil?
      store_prefixes = nil
    elsif @view.respond_to?(:current_store) && @view.current_store && !@view.controller.is_a?(Spree::Admin::BaseController)
      spree = /^spree\//

      store_prefixes = []

      prefixes.each do |i|
        store_prefixes << i.gsub(spree, "spree/#{@view.current_store.code}/") if i.match(spree)
      end

      store_prefixes = (store_prefixes + prefixes).uniq
    else
      store_prefixes = prefixes
    end

    begin
      @lookup_context.find_template(name, store_prefixes, partial, keys, options)
    rescue ::ActionView::MissingTemplate
      @lookup_context.find_template(name, prefixes, partial, keys, options)
    end
  end
  alias_method_chain :find_template, :multi_store
end

Ghettofix解决方案:

删除整个'if句子'并仅保留此内容: if ( typeof module === "object" && typeof module.exports === "object" ) { // For CommonJS and CommonJS-like environments where a proper `window` // is present, execute the factory and get jQuery. // For environments that do not have a `window` with a `document` // (such as Node.js), expose a factory as module.exports. // This accentuates the need for the creation of a real `window`. // e.g. var jQuery = require("jquery")(window); // See ticket #14549 for more info. module.exports = global.document ? factory( global, true ) : function( w ) { if ( !w.document ) { throw new Error( "jQuery requires a window with a document" ); } return factory( w ); }; } else { factory( global ); }

我不确定为什么会这样,但我最好的猜测是电子应用程序,它既有DOM的前端和没有DOM的后端,jQuery选择了后端。