2017-02-21 71 views
1

我試圖讓加載屏幕在聚合物工作,因爲在這個要點看到工作:https://gist.github.com/SlicedSilver/f2e93a5995f84d9cd512獲取加載scren與聚合物

的想法很簡單:入口點是一個輕量級的HTML文件呈現加載屏幕,其主體包含一個onload回調,一旦呈現輕量級頁面,該回調將通過DOM加載Polymer應用程序。

它在桌面瀏覽器上運行得非常漂亮。在移動瀏覽器上,filestoload.html永遠不會被加載(但也不會引發任何錯誤),因此加載屏幕只停留在那裏,應用程序不會加載。完整的代碼如下,但特別注意去這條線:

tag.setAttribute('onload', 'polymerLoader.insertPolymerApplication()'); 

這onload事件永遠不會觸發並不會拋出一個錯誤。我試圖通過DOM和適當的事件處理器來捕獲它,但無濟於事。我甚至試過把它排除所有的完整性檢查的JS手中,加入像這樣的鏈接的HTML文件:

<link rel="import" href="/filestoload.html" onload="polymerLoader.insertPolymerApplication()" > 

同樣的結果 - 顯示在桌面上的應用程序,但只顯示了在手機上加載屏幕。我剛剛從創意中脫穎而出。任何幫助?

....

這裏是輕量級的入口點(的index.html)

<!doctype html> 
 
<html lang="en"> 
 
    <head> 
 
    <meta charset="utf-8"> 
 
    <meta name="viewport" content="width=device-width, minimum-scale=1, initial-scale=1, user-scalable=yes"> 
 
    <link rel="shortcut icon" type="image/png" href="/assets/images/favicon.ico"/> 
 

 
    <title>GreenMaven</title> 
 
    <meta name="description" content="greenmaven description"> 
 

 
    <script src="assets/js/polymerAppLoader.js"></script> 
 

 
    <style type="text/css"> 
 

 
     .loading { 
 
     position: fixed; 
 
     top: 50%; 
 
     left: 50%; 
 
     /* bring your own prefixes */ 
 
     transform: translate(-50%, -50%); 
 
     z-index: -500; 
 
     display: block; 
 
     } 
 
    </style> 
 
    </head> 
 
    <body onload="polymerLoader.loadPolymerApplication()"> 
 

 
    <div id="loader" class="loading"> 
 
     <img src="assets/images/gears.svg" /> 
 
    </div> 
 
    
 
    </body> 
 
</html>

而這裏的加載聚合物應用程序的其餘部分JS:

'use strict'; 
 
/* global polymerLoader */ 
 
/*jshint unused:false*/ 
 
/*jshint -W079*/ 
 

 

 
// This is the normal conditional loader for the Web components Polyfill 
 
if ('registerElement' in document && 'createShadowRoot' in HTMLElement.prototype && 'import' in document.createElement('link') && 'content' in document.createElement('template')) { 
 
    // We're using a browser with native WC support! 
 
} else { 
 
    // Add web components polyfill... 
 
    document.write('<script src="bower_components/webcomponentsjs/webcomponents.lite.js"><\/script>'); 
 
} 
 

 
var polymerLoader = (function() { 
 

 
    // Function for creating a link element and inserting it into the <head> of the html document 
 
    function addLinkTag(elementType, address, shim, loadTrigger) { 
 
    var tag = document.createElement('link'); 
 
    tag.rel = elementType; 
 
    tag.href = address; 
 
    if (shim) { 
 
     // add the shim-shadowdom attribute 
 
     tag.setAttribute('shim-shadowdom', ''); 
 
    } 
 
    if (loadTrigger) { 
 
     // This file needs to be loaded before inserting the Polymer Application 
 
     // when finished loading it will call the polymerLoader.insertPolymerApplication() function 
 
     tag.setAttribute('onload', 'polymerLoader.insertPolymerApplication()'); 
 
     expectedCalls++; 
 
    } 
 
    document.getElementsByTagName('head')[0].appendChild(tag); 
 
    } 
 

 
    var pgApploaded = false; 
 

 
    function loadPolymerApplication() { 
 
    // Only insert once. 
 
    if (!pgApploaded) { 
 
     addLinkTag('import', 'filestoload.html', false, true); 
 
     pgApploaded = true; 
 
    } 
 
    } 
 

 
    // Counter variable for insertPolymerApplication() calls 
 
    var callCount = 0; 
 
    var expectedCalls = 0; 
 

 
    function insertPolymerApplication() { 
 
    callCount++; 
 
    // Only when callCount >= expectedCalls 
 
    // The application is only inserted after all required files have loaded 
 
    // for the application to work. 
 
    if (callCount >= expectedCalls) { 
 
     // here is the html that is inserted when everything is loaded. 
 
     document.querySelector('body').innerHTML += '<template is="auto-binding" id="app"><polymer-app id="main-app"></polymer-app></template>'; 
 
     document.getElementById('loader').style.display = 'none'; 
 
    } 
 
    } 
 

 

 
    return { 
 
    insertPolymerApplication: function() { 
 
     insertPolymerApplication(); 
 
    }, 
 

 
    loadPolymerApplication: function() { 
 
     loadPolymerApplication(); 
 
    } 
 
    }; 
 
})(document);

最後,這裏是一個已經將通常在聚合物的index.html中找到的鏈接和腳本文件filestoload.html:

<!doctype html> 
 
<!-- Here is where you put the scripts required by the page, that would normally be --> 
 
<!-- included in the index.html page, you can still use grunt/gulp build functions on these --> 
 

 
<!-- will be replaced with elements/elements.vulcanized.html --> 
 
<link rel="manifest" href="/manifest.json"> 
 
<link rel="import" href="/src/greenmaven-app/greenmaven-app.html"> 
 
<link rel="stylesheet" href="assets/css/main.css"> 
 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous"> 
 

 
<!-- endreplace--> 
 

 
<!-- build:js scripts/app.js --> 
 
<script src="properties_base/farmhacker-properties.js"></script> 
 
<!-- endbuild--> 
 

 
<!-- build:js scripts/thirdparty.js --> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script> 
 
    
 
    <script> 
 
     $(function() { 
 
     $('a[href*="#"]:not([href="#"])').click(function() { 
 
      if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) { 
 
      var target = $(this.hash); 
 
      target = target.length ? target : $('[name=' + this.hash.slice(1) +']'); 
 
      if (target.length) { 
 
       $('html, body').animate({ 
 
       scrollTop: target.offset().top - $('#navbar').height() 
 
       }, 1000); 
 
       return false; 
 
      } 
 
      } 
 
     }); 
 
     }); 
 
    </script> 
 
<!-- endbuild-->

回答

0

可謂是Polymer build中的一些錯誤,可能與運行polymer build導致應用程序拋出一堆來自鮑爾組件的一堆404錯誤的另一個錯誤有關。

當我對服務器進行原始部署(沒有構建/硫化)時,桌面和移動設備上的一切運行良好,並且沒有出現錯誤。