0

我正在创建一个小部件,我已经像这样初始化了 jQuery:

# widget.js
(function() {
  var jQuery;
  var root_url = "<%= root_url%>";

  if (window.jQuery === undefined || window.jQuery.fn.jquery !== '1.9.1') {
    var jquery_script   = document.createElement('script');
    jquery_script.type  = "text/javascript";
    jquery_script.asyc  = true;
    jquery_script.src   = "http://code.jquery.com/jquery-1.9.1.js";  

    if (jquery_script.readyState) {
      script_tag.onreadystatechange = function () { // For old versions of IE
        if (this.readyState == 'complete' || this.readyState == 'loaded') {
          scriptLoadHandler();
        }
      };
    } else { // Other browsers
      jquery_script.onload = scriptLoadHandler;
    }

    var node = document.getElementsByTagName('script')[0];
        node.parentNode.insertBefore(jquery_script, node); 
  } else {    
    jQuery = window.jQuery;
    main(); 
  }

  function scriptLoadHandler() {
    jQuery = window.jQuery.noConflict(true);
    main(); 
  }

  function main() {
    jQuery(document).ready(function($) {
      // jQuery works great here!
      // But not so much in rendered partials or in server-side JS actions
    }
  }
})();

如果我向我的服务器发出 ajax 请求并以 JS 操作进行响应,我无法在我的action.js.erb文件中使用 jQuery。它吐出错误$ is not a function

类似地,即使在其中使用 jQuery 脚本渲染部分片段也会产生相同的结果。

我想我还没有设置 jQuery 的全局实例,如果是这种情况,我不知道该怎么做。也许我不应该这样做?

我怎样才能解决这个问题?

4

1 回答 1

0

这个解决方案不是我想要的,但我能够将原生 JS 小部件的元素与 iframe 结合起来。一旦我在第 3 方网站上操作了我需要的任何元素(根据我的小部件的功能),我就会渲染一个 iframe 的部分外壳,让我可以完全控制环境。

于 2013-04-29T18:14:19.397 回答