seajs源码
1. 有人读过Echarts源码吗
很高兴,最近我也使用了ECharts ECharts提供的用法中,require是作为模块化加载的入口,如果你使用类似于RequireJS、SeaJS这样的模块化加载JS库的话,那么,就可以使用require()初始化ECharts。 你贴出来的链接这篇文章
2. seajs怎么调用jquery的插件
方法一,将js插件cmd模块化(define封装成seajs模块,返回匿名函数,包含插件的源码)。
/**
* Created with JetBrains PhpStorm.
* User: ph
* Date: 13-3-11
* Time: 上午9:24
* To change this template use File | Settings | File Templates.
*/
define(function(require,exports,moudles){
return function(jquery){
(function($) {
$.fn.pri= function() {
alert($("a").attr("href"))
// 代码区域。
};
})(jquery);
}
})
jquery库在总js文件(调用该插件的文件)中加载。通过require("t1/jquery_pligun")()来传递jquery变量(参数) ,保证了jquery在调用js插件模块之前加载
/**
* Created with JetBrains PhpStorm.
* User: ph
* Date: 13-3-11
* Time: 上午9:40
* To change this template use File | Settings | File Templates.
*/
define(function (require, exports, moudles) {
var $=require("jquery")
require("t1/jquery_pligun")($)
$(document).ready(function () {
$("a").pri()
})
})
补充:SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制。与jQuery等JavaScript框架不同,SeaJS不会扩展封装语言特性,而只是实现JavaScript的模块化及按模块加载。SeaJS的主要目的是令JavaScript开发模块化并可以轻松愉悦进行加载,将前端工程师从繁重的JavaScript文件及对象依赖处理中解放出来,可以专注于代码本身的逻辑。SeaJS可以与jQuery这类框架完美集成。使用SeaJS可以提高JavaScript代码的可读性和清晰度,解决目前JavaScript编程中普遍存在的依赖关系混乱和代码纠缠等问题,方便代码的编写和维护。
3. seajs 怎么载入json文件
将js插件cmd模块化(define封装成seajs模块,返回匿名函数,包含插件的源码)。 jquery库在总js文件(调用该插件的文件)中加载。通过require("t1/jquery_pligun")()来传递jquery变量( 参数) ,保证了jquery在调用js插件模块之前加载
4. vue.js和seajs相同吗
这个光靠源代码找是不太方便的,用开发者工具可以很容易的找到。
首先,在该网页加载过程中发出的请求中搜索标题,我搜索的是Droplet单词。发现该单词是由'en/search/journalresult'请求的。
请求结果中反回了这一块的html。
然后找哪段代码发出的该请求。在js中全局搜索journalresult,找到如下代码:
var resultURL = '/en/search/journalresult';
5. 引入seajs以后怎么改写页面中的onclick
define( function (require, exports, mole){ // angularjs源码return angular;});这样引入是可以使用到angular;
6. 怎么让sea.js自身异步加载
为了极限性能,也为了做一些封装,我需要对seajs自身进行异步加载,通过以下代码加载seajs发现config与use都未执行。
<script>
// 其他代码
// sea.js 的异步载入代码:
;(function(m, o, d, u, l, a, r) {
if(m[o]) return
function f(n) { return function() { r.push(n, arguments); return a } }
m[o] = a = { args: (r = []), config: f(1), use: f(2), on: f(3) }
m.define = f(0)
u = d.createElement("script")
u.id = o + "node"
u.async = true
u.src = "path/to/sea.js"
l = d.getElementsByTagName("head")[0]
l.appendChild(u)
})(window, "seajs", document);
// 立刻就可以调用 seajs 的方法了:
seajs.config({
alias: {
'jquery': 'path/to/jquery-1.9.1.min.js'
}
});
seajs.use('./main', function(main) {
// do some cool things.
});
</script>
然后在网上查了以下,发现玉伯去除 sea.js 自身的异步加载内置支持,
https://github.com/seajs/seajs/issues/733
木有办法,只能自己改一改了,我当前使用的版本是2.1.1,为了兼容以后新的版本就不动他的源代码,只在sea.js 底部加上一段:
G = this;
var k = G.PagurianObjectName;
var Pagurian = function(a) {
this.push = function(a) {
if (a[0] === 'config') {
seajs[a[0]](a[1]);
}
if (a[0] === "use") {
seajs[a[0]](a[1], a[2]);
}
}
if (a && a.length) {
for (var b = 0; b < a.length; b++) this.push(a[b])
}
};
G[k] = new Pagurian(G[k].q);
然后在用的时候,这样用:
(function(i, d, o, u, p) {
if (i[u]) return;
i['PagurianObjectName'] = p;
i[p] = i[p] || function() {
return (i[p].q = i[p].q || []).push(arguments)
};
s = d.createElement(o);
s.src = "src/core/sea.ext.js";
s.charset = "utf-8";
s.async = true;
s.id = u + "node";
f = d.getElementsByTagName(o)[0];
f.parentNode.insertBefore(s, f);
})(window, document, 'script', "seajs", "pagurian");
pagurian("config", {
base:"src",
alias: {
"jquery": "plugins/jquery/1.11.1/jquery.js"
},
preload: ["jquery"],
charset: 'utf-8',
timeout: 20000,
debug: false
});
pagurian("use", "presenter/standard/standard.app", function(app) {
app.page.message();
});
7. LABjs、RequireJS、SeaJS 哪个最好用为什么
LABjs 的核心是 LAB(Loading and Blocking):Loading 指异步并行加载,Blocking 是指同步等待执行。LABjs 通过优雅的语法(script 和 wait)实现了这两大特性,核心价值是性能优化。LABjs 是一个文件加载器。 RequireJS 和 SeaJS 则是模块加载器,倡导的是一种模块化开发理念,核心价值是让 JavaScript 的模块化开发变得更简单自然。 模块加载器一般可降级为文件加载器用,因此使用 RequireJS 和 SeaJS,也可以达成 LABjs 的性能优化目的。 RequireJS 和 SeaJS 都是很不错的模块加载器,两者区别如下: 1. 两者定位有差异。RequireJS 想成为浏览器端的模块加载器,同时也想成为 Rhino / Node 等环境的模块加载器。SeaJS 则专注于 Web 浏览器端,同时通过 Node 扩展的方式可以很方便跑在 Node 服务器端 2. 两者遵循的标准有差异。RequireJS 遵循的是 AMD(异步模块定义)规范,SeaJS 遵循的是 CMD (通用模块定义)规范。规范的不同,导致了两者 API 的不同。SeaJS 更简洁优雅,更贴近 CommonJS Moles/1.1 和 Node Moles 规范。 3. 两者社区理念有差异。RequireJS 在尝试让第三方类库修改自身来支持 RequireJS,目前只有少数社区采纳。SeaJS 不强推,而采用自主封装的方式来“海纳百川”,目前已有较成熟的封装策略。 4. 两者代码质量有差异。RequireJS 是没有明显的 bug,SeaJS 是明显没有 bug。 5. 两者对调试等的支持有差异。SeaJS 通过插件,可以实现 Fiddler 中自动映射的功能,还可以实现自动 combo 等功能,非常方便便捷。RequireJS 无这方面的支持。 6. 两者的插件机制有差异。RequireJS 采取的是在源码中预留接口的形式,源码中留有为插件而写的代码。SeaJS 采取的插件机制则与 Node 的方式一致:开放自身,让插件开发者可直接访问或修改,从而非常灵活,可以实现各种类型的插件。 还有不少细节差异就不多说了。 总之,SeaJS 从 API 到实现,都比 RequireJS 更简洁优雅。如果说 RequireJS 是 Prototype 类库的话,则 SeaJS 是 jQuery 类库。 最后,向 RequireJS 致敬!RequireJS 和 SeaJS 是好兄弟,一起努力推广模块化开发思想,这才是最重要的。
8. seajs怎样先加载jquery再加载Bootstrap
seajs加载不符合AMD规范的,要在源代码里加define(function() {//源代码 })
9. requirejs和seajs的区别
两者的区别如下:
定位有差异。RequireJS 想成为浏览器端的模块加载器,同时也想成为 Rhino / Node 等环境的模块加载器。SeaJS 则专注于 Web 浏览器端,同时通过 Node 扩展的方式可以很方便跑在 Node 服务器端。
遵循的规范不同。RequireJS 遵循的是 AMD(异步模块定义)规范,SeaJS 遵循的是 CMD (通用模块定义)规范。规范的不同,导致了两者 API 的不同。SeaJS 更简洁优雅,更贴近 CommonJS Moles/1.1 和 Node Moles 规范。
社区理念有差异。RequireJS 在尝试让第三方类库修改自身来支持 RequireJS,目前只有少数社区采纳。SeaJS 不强推,采用自主封装的方式来“海纳百川”,目前已有较成熟的封装策略。
代码质量有差异。RequireJS 是没有明显的 bug,SeaJS 是明显没有 bug。
对调试等的支持有差异。SeaJS 通过插件,可以实现 Fiddler 中自动映射的功能,还可以实现自动 combo 等功能,非常方便。RequireJS 无这方面的支持。
插件机制不同。RequireJS 采取的是在源码中预留接口的形式,源码中留有为插件而写的代码。SeaJS 采取的插件机制则与 JavaScript 语言以及Node 的方式一致:开放自身,让插件开发者可直接访问或修改,从而非常灵活,可以实现各种类型的插件。
10. 如何在chrome浏览器里面安装360抢票软件
打开浏览器扩展页面,将360抢票扩展插件的安装包拖动到扩展页面即可进行安装!
首先, 直接在chrome里面打开pc.huochepiao.360.cn没法用(因为我在安装360浏览器的时候并没有安装额外的extension, 所以猜测可能并不需要extension). 然而, 经过调试pc.huochepiao.360.cn 这个抢票站点之后发现在js 里面有一段判断代码格外引人注目:
if (isExtInstalled) {
if (extVer >= minExtVer) {
document.getElementById('main').style.display = 'block';
seajs.config({
base: './'
});
于是尝试将判断都设置成true, 这样就能看到和在306浏览器里面显示的界面查不到的功能了, 但是还是没办法登陆以及刷票, 很多访问12306的链接都没有正确返回(connect forbidden).
经过一段时间的分析发现在index.js 里面有些调用widget的url, 于是又发现js源码里面有:
var extUrl = 'http://download.se.360.cn/ext/piao_5.2.0.20.crx'
尝试下载这个文件之后, 用7zip成功解压, 并且通过调试模式加载到chrome的extension, 发现居然可以用.
下一步, 卸载360浏览器.