2015-08-28 47 views
1

我有一個使用vis.js的AngularJs網絡應用程序,它與IE9 +兼容,但我試圖讓這個網頁應用程序與IE8兼容,而用戶可以使用較少的功能, ,因爲我必須我在IE8中不斷收到Object.create錯誤

我包括以下庫來處理共同IE8兼容性問題:

<!--[if lte IE 9]> 
     <script type='text/javascript' src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.7.1/modernizr.min.js"></script> 
     <script type='text/javascript' src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> 
     <script type='text/javascript' src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.js"></script> 
     <script type='text/javascript' src="scripts/eventShim.js"></script> 
     <script> 
// here I create the elements for all the custom directives 
     document.createElement('custom-handler'); 
     document.createElement('custom-info'); 
     document.createElement('custom-data'); 
     document.createElement('custom-param'); 
     document.createElement('custom-rel'); 
     document.createElement('custom-panel'); 

     // Optionally these for CSS 
     document.createElement('ng:include'); 
     document.createElement('ng:pluralize'); 
     document.createElement('ng:view'); 
     document.createElement('ng:style'); 
     document.createElement('ng:class'); 
     </script> 
    <![endif]--> 

,然後用涼亭:在bower.json中定義的庫

<!-- build:js(.) scripts/vendor.js --> 
<!-- bower:js --> 
    <script src="bower_components/es5-shim/es5-shim.js"></script> 
    <script src="bower_components/json3/lib/json3.js"></script> 
... 
<!-- endbower --> 
<!-- endbuild --> 

值得注意的版本:

"angular": "1.2", 
"jquery": "1.11.2", 
"json3": "~3.3.2", 
"es5-shim": "~4.1.11", 
"bootstrap-sass-official": "~3.3.5", 
"angular-animate": "~1.2.0", 
"angular-cookies": "~1.2.0", 
"angular-resource": "~1.2.0", 
"angular-route": "~1.2.0", 
"angular-sanitize": "~1.2.0", 
"angular-touch": "~1.2.0", 
"angular-bootstrap": "0.12.0", 
"vis": "~3.7.2", 
"string": "~3.0.0", 
"components-font-awesome": "~4.4.0", 
"jquery-ui": "~1.11.4" 

問題

儘管所有上面的設置,當我訪問使用IE8,我在控制檯收到以下錯誤我的web應用程序:

Object doesn't support this property or method  vis.min.js, line 29 character 1204 

並通過單擊,在控制檯將光標放在以下代碼行的開頭:

s.prototype=Object.create(o.prototype),s.prototype.redraw=function(... 

即使我評論了其中的vi部分,該錯誤仍然存​​在使用s.js。

在IE9中打開網絡應用程序時,我無法找到包含vis.js庫的方法,所以我的B計劃只是爲了擺脫與vis相關的錯誤.js,然後使無法使用該庫的網絡應用程序中的所有功能。

這種方法可行嗎?

如果不是,我該如何解決這個問題?

回答

2

我沒能找到涼亭辦法,包括剛當web應用在IE9 +

鮑爾打開只能包括源vis.js庫。
對於這樣的任務,創建了吞嚥
例如你的建築將與這樣的代碼存在:

var gulp = require('gulp') 
var bowerFiles = require('main-bower-files'); 
var gulpFilter = require('gulp-filter'); 
var gulpInject = require('gulp-inject'); 

gulp.task('wiredep', function() { 
    var ie8Files = ['**/json3.js', '**/es5shim.js']; 
    // the same as: var restFiles = ['*', '!**/json3.js', '!**/es5shim.js']; 
    var restFiles = ['*'].concat(ie8Files.map(function(e) { return '!' + e;})); 
    gulp.src('index.html') 
    .pipe(gulpInject(gulp.src(bowerFiles(), {read: false}).pipe(restFiles)) 
    .pipe(gulpInject(gulp.src(bowerFiles(), {read: false}).pipe(ie8Files), 
        {starttag: '<!--[if lt IE 9]>', endtag: '<![endif]-->'}) 
    .pipe(gulp.dest('dist')); 
}); 

like here

或者像你說的B計劃:

你可以寫所有周期爲您的代碼這樣的一個:

if (!Object.create) { 
    Object.create = function(o, properties) { 
     if (typeof o !== 'object' && typeof o !== 'function') throw new TypeError('Object prototype may only be an Object: ' + o); 
     else if (o === null) throw new Error("This browser's implementation of Object.create is a shim and doesn't support 'null' as the first argument."); 

     if (typeof properties != 'undefined') throw new Error("This browser's implementation of Object.create is a shim and doesn't support a second argument."); 

     function F() {} 

     F.prototype = o; 

     return new F(); 
    }; 
} 

like here

我認爲你應該添加一個吞嚥結構。

+0

嗨Illia,我正在使用Grunt,你知道如何在Grunt中實現基於Gulp的解決方案嗎? 對於B計劃,我遇到了同樣的'Object.create' polyfill,並且知道這將是我在洞中的王牌;但是,我應該將它包含在'index.html'頁面內的'