两个页面,父页和子页。
父页里有一个iframe,src指向子页
父页加载jQuery.js文件
子页没有加载jQuery.js
子页里代码如下
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <script type="text/javascript"> function aa() { var div = $("#dd"); div.html("bbbbbbbbbbbbbbbb"); var para =$.getUrlParameter(document); alert(para.aa); } var $ = function(select, rootjQuery) { if (typeof select == "undefined") return parent.window.$; else return parent.window.$(select, document, rootjQuery); }; $.prototype = parent.window.$; </script> </head> <body> <div id="dd" onclick="aa()">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div> </body> </html>
$.getUrlParameter(document); 这句报错,没有 getUrlParameter函数。
。
如果写成
parent.window.$.getUrlParameter(document); 就可以正常执行。
用chrome,调试 子页自己定义 的 $ 的 prototype 里有 getUrlParameter,不是说可以往下找吗?为啥没往下找呢?
想起来了。
但是 jQuery的 $ 为啥既可以 带括号,也可以不带括号呢?
刚才看了半天jQuery源码,发现他内部其实是 new了一下。还是不太明白。
function aa() { var div = $("#dd"); div.html("bbbbbbbbbbbbbbbb"); var para =$.getUrlParameter(document); alert(para.aa); } var $ = function(select, rootjQuery) { return parent.window.$(select, document, rootjQuery); }; if (typeof parent.window.$ != "undefined") { var tmp = parent.window.$; for (var key in tmp) { $[key] = tmp[key]; } }
终于搞定了。
要访问原型中的属性, 首先要实例化出一个对象才行。
var x = new $();
x.getUrlParameter ...
$.fn.getUrlParameter 不行么