两者似乎都在Web开发圈中使用,例如参见HTML5 Cross Browser Polyfills,它说:
所以我们在这里收集所有的垫片,后备和填充物......
或者,有es5-shim项目.
在我目前的项目中,我们使用了其中的一些,我想将它们全部放在同一目录中.那么,我该怎么称呼这个目录--- shims
,或者polyfills
?
HTML5中polyfills的含义是什么?我在许多网站上看到过关于HTML5的这个词,例如HTML5-Cross-Browser-Polyfills.
所以我们在这里收集所有垫片,后备和polyfill,以便在本身不支持它们的浏览器中植入HTML5功能.
我其实不明白polyfills是什么意思.
它是一种新的HTML5技术还是JavaScript库?我从来没有在HTML5之前听过这个词.
垫片,后备和填充物之间有什么区别?
我刚刚开始使用Babel将我的ES6 javascript代码编译成ES5.当我开始使用Promises时,看起来它不起作用.Babel网站表示支持通过polyfill承诺.
没有运气,我试图添加:
require("babel/polyfill");
Run Code Online (Sandbox Code Playgroud)
要么
import * as p from "babel/polyfill";
Run Code Online (Sandbox Code Playgroud)
有了这个我将在我的应用程序引导上得到以下错误:
找不到模块'babel/polyfill'
我搜索了模块,但似乎我在这里缺少一些基本的东西.我也尝试添加旧的和好的蓝鸟NPM,但看起来它不起作用.
如何使用Babel的polyfills?
我正在使用Angular CLI(1.1.2)构建一个Angular4项目.它在Chrome(版本59.0.3071.115)和firefox(54.0.1)中运行完美,但是当我尝试使用IE11(Verison 11.0.9600.18738)时,nothings出现并且当我在IE中打开开发模式时,它显示以下错误:
SCRIPT5022: Exception thrown and not caught
File: polyfills.bundle.js, Line: 829, Column: 34
Run Code Online (Sandbox Code Playgroud)
详细的错误消息如下:
谁知道如何解决这个问题?
谢谢!
compatibility internet-explorer polyfills angular-cli angular
我正在混合网络浏览器环境(Chrome/IE11)中开发网页.IE11不支持CSS变量,是否存在允许我在IE11中使用CSS变量的polyfill或脚本?
假垫片和假牙有什么区别?
是否足以包含es5-shim.min.js和es6-shim.min.js,还是应该包括es5-sham.min.js和es6-sham.min.js?
我正在仔细评估利用Modernizr和Respond.js进行响应式设计的最佳方式,并为社区提出了几个问题.
首先,我的理解是,在将Modernizr与Respond.js捆绑在一起时,IE8及以下版本的媒体查询支持不需要其他编码或测试.换句话说,当Respond.js与Modernizr捆绑在一起时,我只需要在我的源代码中加载Modernizr以使Respond.js处于活动状态.正确?
其次,您是否认为这是在IE8及以下版本中获得媒体查询支持的最有效方式?从本质上讲,我将包括一个比已经支持媒体查询的浏览器所需的更大的Modernizr脚本.如果对媒体查询的测试失败,分离两个脚本并且只加载Respond.js会不会更有效率?
第三,如果我想分开这两个脚本,你认为如果需要加载Respond.js的最佳方法是什么?一种选择是使用IE特定的条件注释来加载Respond.另一个选择是使用yepnope和Modernizr测试媒体查询支持并在需要时加载Respond.哪个更有效,更具有故障性.
最后,如果我选择分离这两个脚本并使用Modernizr加载Respond,如果需要,我遇到了以下两种技术:
<script>
yepnope({
test : Modernizr.mq('(only all)'),
nope : ['js/libs/respond.min.js']
});
</script>
Run Code Online (Sandbox Code Playgroud)
要么
<script>Modernizr.mq('(min-width:0)') || document.write('<script src="js/libs/respond.min.js"><\/script>')</script>
Run Code Online (Sandbox Code Playgroud)
我发现第二次崩溃IE8,但必须只需要重写.你会推荐哪种技术?
谢谢你的帮助.
尽管围绕html5形式的所有嗡嗡声,在我看来,在大多数情况下,通过这条路线,你正在创造额外的工作.
举一个例如,一个datepicker字段.本机html5实现在每个浏览器中呈现不同.此外,对于不支持此功能的浏览器,您的polyfilled解决方案(例如jquery UI)也将以不同方式呈现.
现在,当我们使用jquery完美地工作和统一解决方案时,我们已经为同一个表单引入了多个定制和维护点!
我很想听听这个领域的一些真实世界的经历,因为我对所有的嗡嗡声感到恼火!
当我使用Angular CLI(8.0.0)生成项目时,运行ng serve
,在Internet Explorer中打开应用程序,然后出现空白屏幕。
我看了看polyfills.ts
文件,并取消了以下几行的注释:
import 'classlist.js';
import 'web-animations-js';
Run Code Online (Sandbox Code Playgroud)
我也删除了所有core.js导入,因为Angular 8直接支持core.js 3.0。
我也跑了npm i
。
package.json:
"dependencies": {
"@angular/animations": "~8.0.0",
"@angular/common": "~8.0.0",
"@angular/compiler": "~8.0.0",
"@angular/core": "~8.0.0",
"@angular/forms": "~8.0.0",
"@angular/platform-browser": "~8.0.0",
"@angular/platform-browser-dynamic": "~8.0.0",
"@angular/router": "~8.0.0",
"classlist.js": "^1.1.20150312",
"rxjs": "~6.4.0",
"tslib": "^1.9.0",
"web-animations-js": "^2.3.1",
"zone.js": "~0.9.1"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.800.0",
"@angular/cli": "~8.0.0",
"@angular/compiler-cli": "~8.0.0",
"@angular/language-service": "~8.0.0",
"@types/node": "~8.9.4",
"@types/jasmine": "~3.3.8",
"@types/jasminewd2": "~2.0.3",
"codelyzer": "^5.0.0",
"jasmine-core": "~3.4.0",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~4.1.0",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.1",
"karma-jasmine": "~2.0.1", …
Run Code Online (Sandbox Code Playgroud) 我正在使用webpack捆绑我的JavaScript.我依赖于使用任何承诺的冰棒等模块.
这是我的代码:
var popsicle = require('popsicle');
popsicle.get('/').then(function() {
console.log('loaded URL');
});
Run Code Online (Sandbox Code Playgroud)
这在Promise
可用的浏览器中工作正常,但IE 11不提供Promise.所以我想使用es6-promise作为polyfill.
我尝试添加一个明确的ProvidePlugin
给我webpack.config.js
:
plugins: [
new webpack.ProvidePlugin({
'Promise': 'exports?global.Promise!es6-promise'
})
]
Run Code Online (Sandbox Code Playgroud)
但我仍然在IE 11中得到错误:any-promise browser requires a polyfill or explicit registration e.g: require('any-promise/register/bluebird')
.
我尝试明确附加全局:
global.Promise = global.Promise || require('es6-promise');
Run Code Online (Sandbox Code Playgroud)
但IE 11给出了一个不同的错误:Object doesn't support this action
.
我也尝试过明确注册es6-promise:
require('any-promise/register/es6-promise');
var popsicle = require('popsicle');
Run Code Online (Sandbox Code Playgroud)
这有效,但我必须在每个加载的文件中执行此操作popsicle
.我想Promise
加入window
.
如何window.Promise
使用webpack …
polyfills ×10
javascript ×5
html5 ×3
angular ×2
angular-cli ×2
shim ×2
angular8 ×1
babeljs ×1
css ×1
css3 ×1
ecmascript-5 ×1
ecmascript-6 ×1
fallback ×1
forms ×1
modernizr ×1
naming ×1
node.js ×1
terminology ×1
vocabulary ×1
webpack ×1
webshim ×1