开篇

本周初步五一假日,计划回家一趟,所以在回家前把上星期割的内容补一下,之后或许会把文章全体搬迁,详细计划还在考虑中。

关于内容,也在考虑怎样才能让阅览进程所花费的时刻变得有价值(不仅是关于自己,也关于悉数花费时刻来看的人)。当然内容首要仍是自我总结javascript和评论为主,elementanimation本期初步会追加动漫的推荐以点题。

elements

qiankun

依据single-spaqiankun是现json解析在微前javascript高档程序设计端(容器)届比较亮的那颗星了,最近电脑的作业中也运用qiankun踩了一些网上不常见的坑,简略总结几点:

1. 关于angularjs和qiankun的整合

子项目是依据angularjs的项目,运用fis构建(百度出品,非webpack)。关于非webpack打包工程(例如:jquery字体美化大师qiankun官方供给了qiankun的标准计划
qiankun非webpack构建运用

可是关于angularjs运用了require.js,在require.js中界说了requiredefine的变量,可是qiankun的沙电脑怎样录屏箱机制导致这些变量的有用规模发生了改动,需求在window上挂载requielementuiredefine,使得变量挂载到子运用到大局,这部分改动能够补偿在requjsonpire.js底部,不过,建议能够用另一个文件引用require.js,将这部分代elementary码追加到新文件中。

// requirejson.polyfjavascriptill.js
include('require.js');
window.require = require;
window.requirejs = requirejs;
windo电脑快捷键w.define = define;

处理掉办法挂载,会发现require.js依托的模块加载,仍然提示define未界说,然后查看页面元素,会发现刺进部分的脚本脱离了qiankun的沙箱机制机制,为什么呢?

这儿触及两个知识点:

1)requirejs的脚本刺进Element

require.js中刺进脚本的时分会先去查找<head>节点,javascript和java的差异之后查找<base>节点,假设找到了<base>节点,会把<base>节点的父节点作为刺进方位,之后调用inserelementanimationtBefore刺进脚本

// Line:1802
if (isBrowser) {
head = s字体辨认扫一扫.hjavascript和java的差异eajavascriptd = document.getElementsByTagName('head')[0];
//If BASE tag is in pjavascriptlay, using appendChild is a problem for IE6.
//Whe电脑截图快捷键ctrl加什么n that browser dies, this can be removed. Details in this jQuery bug:
//http://dev.jquery.com/ticket/2709
baseElement字体美化大师 = document.getElementsByTagName('bjavascript数据类型ase')[0];
if (baseElement) {
head = s.head = baseElemenjavascriptt.parentNode;
}
}
// Line: 1904
if (baseElement) {
head.inserelement什么意思中文tBefore(node, baseElement);
} else {
hejavascriptad.appendChild(node);
}

2)qiankun沙箱处理机制

qiankunjavascript:void(0)impjavascript什么意思ort-html字体转换器-entry的包,对悉数加载进口文件indjsonex.html进行了加载,对HTMLHeadElementinsertBeforeelement滑板appendChild进行了重载,并对HTMLB电脑怎样录屏odyElementappendChild进行了重载

// common.ts  Line: 305  patchHTMLD电脑截图快捷键ctrl加什么ynamicAppendPrototypeFunctions
if (
HTMLHeadElement.prototype.appendChild === rawHeaelementarydAppejavascript:void(0)ndChild &&
HTMLBodyElement.prototype.appendChild === rawBodyAppendChild &&
HTMLHeadElement.prototype.insertBefore === rawHea字体大小怎样调dInsertBefore
) {
HTMLHeadElement.prototype.appendChild = getOverwrittenAppendChildOrIelementarynsertBefore({
ra电脑wDOMAppendOrInsertBefore: rawHeadAppendChild,
containelement是什么牌子erConfigGetter,
isInvokedBjson格局怎样打开yMicroApp,
}) as typeof rawHeaelementary是什么意思dAppendChild;
HTMLBodyElement.prototype.appe字体下载ndChild = getOverwrittenAppendChildOrInsertBefore({
rawDOMAppendOrInsertBeforelement滑板e: rawBodyAppendChild,
containerConfigGetter,
isInvokedByMjavascript和java的差异icroApp,
})javascript数据类型 a字体美化大师s typeof rawBodyAppjavascriptendChild;
HTMLHeadElement.prototype.insertBefore = getOverwrittenAppendChildOrInsertBefore({
rawDOMAppendOrInsertBefore: rawHelementanimationeadInsertBefore as any,
containerConfigJSONGetter,
isInvokedByelement什么意思中文MicroApp,
}) as typeof rawHeadInsertBefore;
}

重载进程首要是处理<script><style>其间:gelementaryetOverwrittenAppendChildOrInsertBefore办法源码,以上两个部分在结合运用到时分呈现了一个问题,angular中的&javascript高档程序设计lt;base>原本是在<head>

<html>
<head>
<base href="/" />
</head>
</html>

而在子运用刺进qiankun电脑截图快捷键时分,默许会移除去<htJavaScriptml>节点和<head>节点(暂时没看到这是在哪一步完成的),然后<base>的父节点从HTMLHeadElement变成了HTMjavascriptLBodyElement

<div id="__qiankun_microapp_wrapper_for_xxxxx">
<base href="/" /javascript和java的差异>
</div>

刚才代码中我们看到qiankun没有重载HTMLBodyElementinsertBefore办法(原因不明),导致该脚本直接被刺进到了基座运用中,基座运用当然不包括之前暴露的电脑键盘功用基础知识window.define导致报错。

因此处理计划,字体辨认扫一扫要么修正require.js的查找机制,要么处理<base>节点方位,最终和有经历的伙伴协商后,决定在require.js加载前,动态在刺进<base&g电脑怎样截图t;结点到基座的<head>中,处理问题:

<script type="text/javascript">
if (!doelement什么意思中文cument.ge字体辨认扫一扫tElementsByTagNameelement滑板('head')[0].querySelector('base')) {
document.getElementsByTagName('head')[0].appendChild(document.getElementsByTagName('base')[0]);
}
</script>

2. 关于静态资源加载

qiankun沙箱关于style的处理逻辑,会elementary是什么意思link的子运用作为<style>刺进基座运用中,假设子运用的CSS中运电脑蓝屏用了相对途径(例如:background:url(../xxx),字体文件等),则此时相对途径会被变成相对基座运json格局用的途径,JSON然后无法找到引用的文件,此时能够运用官方供给的计划:
资源加载404

简略来说,计划是将相对途径变成绝对途径,例如:web电脑开不了机pack打包的能够设置publicPath进行途径替换

3. 其他的改造

main.js是中心的改造,angularjsbootstrap只允许调用json文件是干什么的一次,那么两个an电脑截图快捷键ctrl加什么gularjs运用切电脑键盘功用基础知识换的进程,需求进行额定的处理(render办法中的逻辑),详细可拜见以下内容:

function render(props) {
// Require JS  Config File
require.config(__inelement什么意思中文line('relement是什么牌子equire.cojson解析nfig.json'));
const staticHTML = `<div ng-controller="AppCtrl">
<div ui-view>jsonp跨域原理</div>
<div uix-notifjavascript:void(0)y></div>
</div>`
// check angular frame is bootstrap, it need bootstrap only once
if (elementui__state.instance) {
an字体辨认gujavascript是干什么的lar.element(__state.el).html(statijavascript数据类型cHTML);
const link = __angular__.$compile(angular.element(__state.el).contents())
link(__state.$scope);JavaScript
getContainerEl().appendChild(__state.el);
} else {
const el = document.createEle电脑开不了机ment(电脑开不了机'div');
el.innerHTM字体大小怎样调L = staticHTML;
__state.el = el;
getContainerEl().appendChild(__state.el);
require(['appInit'], functio字体n (app) {
_电脑开不了机_state.instance = angular.bootstra电脑截图快捷键p(el, [app.name], {
strictDi: true
});
// __state.$scope is just $rootScope
__state.$scope = angular.element(el).scope();
});
}
}
const mount = () => {
return new Promise((resolve, r电脑eject) => {
getHorn()elementary.then(() =>JavaScript {
render();
resolve(电脑快捷键);
});
});
}
const unmount = () => {
return new Promise((resolve, reject) => {
// don't destroy $rootScope, ui-xg components wouljavascript什么意思d not work, maybe some other unknown affects?
// just clelementaryear AppCtrl
angular.elejson解析men字体辨认扫一扫t(__stajson格局怎样打开te.el.querySelector('div[ng-controller=AppCtrljavascript和java的差异]')).scope().$destroy();
__state.el.innerHTML = '';
getContainerEl().removeChild(__s电脑开不了机tate.el);
resolve();
});
}
const getContainerEl = () => {
let element = document.getElementByIdelement什么意思中文('app');
if (!elemejavascript高档程序设计nt) {
throw new Error(`domElementGetter did not return a valid dom element`);
}
return element;
}
if (!windoelement滑板w.__javascript菜鸟教程POWERED_BY_QIANKUN__) {
getHorn().then(() => {
render();
});javascript怎样读
} elelementtypese {
((global) => {
global['/xxxxx'] = {
bootstrap: () => {
return Promise.resolve();
},
mount: mount,elementanimation
unmounJSONt: unmount,
};
})(window);
}

整个改造进程花费了比较多的时刻,也爬了比较多的坑,可是关于本身来说,收益是很明显的,很喜欢这个处电脑开不了机理问题的整个进程和思路,也很感谢Leader对我的协助。elementary

非技术

1. Duet

一款很不错的分屏工具,能够将电脑屏幕通过数据线分屏到iphone,pad等设备,看到电脑开机黑屏有人运json是什么意思用往后觉得真的这个十分赞,
Duet

动漫推荐

《钢制炼金术士》

本期是动漫推荐的第一期,《钢之炼金术师》jsonp简称《钢炼》,被bones(骨头社)制作了两个版别,分别是03版elementanimationFA版别,其间的03版别运用了原创结局,两个版别都很超卓,b站最近限免中。

国际观

钢炼依据等价交流的这一偏哲学意味的主题,悉数的悉数都是盘绕此打开的,在一个虚拟的国际,描json字符串绘了日子在这儿的形形色色的正电脑怎样康复出厂设置/反两头的观念对冲。

剧情走向

jsonp跨域原理艾尔利克兄弟为了复生病逝的母亲javascript菜鸟教程,尝试了忌讳的人体炼成,兄弟两人分别被人体炼成夺取了等价之物字体,为了夺回弟弟的身体,两人踏上了根究国际的路途字体天下

推荐理由

推荐钢炼的理由有三点:

1)无缺的人物描写

钢炼是字体管家我看过的关于人物描写特别无缺的动漫,这儿的无缺是指人elementary是什么意思物前后行为逻辑的自洽,每个角色的行为都是其性情的体javascript怎样读现。

每一个人物的进场和离场,都让这个故事的全体主线变得丰满,json是什么意思没有不必要的人,每个人在某个时刻总会发挥着特别的作用。

正如我对社会的json知道相同,人类社会便是凌乱的人类综合体,每个人都在其间推进着国际的跋涉,你或许不JSON是明面上的主角,可是你一定是你自己的主角JavaScript

2)没有无限胀大的剧情和战力

大部电脑怎样康复出厂设置分少年Element漫特色便是战力崩坏,我们也喜欢各种傲天的类型(我也喜欢),而钢炼很好的操控了这个问题,从始至终,战力便是很平衡的状况,主角从来没有经历什么变得强的一发不可收拾,相反,你能够看javascript:void(0)到其实两兄弟一直在elements吃瘪。

没有传统少年漫的爽快感,反而更能整个剧情的丰满,剧情的推进不是依托打怪javascript晋级,而是对这个国际的根究,对“真理”的根究一步一步推进的,牛姨想要表达的国际观。

3)仅有的国际规矩

等价交流的规矩,在看完03版别往后,我本身把这一规矩认为了是仅有真理。悉数的行为,都会导致其作用,其作用必定是合理的等价,仅仅这儿的等价并不是以个人的知道为转移,而是真正的电脑快捷键等价,也便是说,艾尔利克兄弟支付价值复生了母亲,仅仅这儿的母亲并不等于他们所以想要的母亲,可是从原则上来说辅佐的价值和母亲确实是等价的,简略来说,等价json解析交流的产品纷javascript高档程序设计歧定是你想要的,可是一定是对等的。

关于钢炼的全体在动漫领域的剖析,其实很多人都在吹,可是动漫和其他的文艺作品相同,更多的仍是要自己去领会,或许关于你来说电脑快捷键他很欠好,也正是我们能有各自的定见而且也能包容别人的观念,社会才一json是什么意思直在跋涉

结束

五一期间除了歇息,经历字体大小怎样调了很难过的作业,也有反思,反思自己的问题,电脑怎样录屏处理作业的方式和办法。期望我们能假日高兴!