Files
shaka-player/demo/load.js
T
Joey Parrish dbbbbd160f Clean up demo loader
The loader script for the demo uses document.write to add script tags.
This is not ideal, and currently generates these warnings in Chrome:

[Violation] Parser was blocked due to document.write(<script>)
[Violation] Avoid using document.write().

This replaces the import mechanism and hooks it into Closure library.

This also fixes uncompiled mode on Cobalt, which does not have
document.write.  (http://cobalt.foo/)

Fixes: 37246436

Change-Id: I4b8acf41edb314be359bca42d224112020c30709
2017-05-25 23:49:01 +00:00

81 lines
2.9 KiB
JavaScript

/**
* @license
* Copyright 2016 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Loads the library. Chooses compiled or debug version of the library based
* on the presence or absence of the URL parameter "compiled".
*
* This dynamic loading process is not necessary in a production environment,
* but greatly simplifies the process of switching between compiled and
* uncompiled mode during development.
*
* This is used in the provided demo app, but can also be used to load the
* uncompiled version of the library into your own application environment.
*/
(function() { // anonymous namespace
// The sources may be in a different folder from the app.
// Compute the base URL for all library sources.
var currentScript = document.currentScript ||
document.scripts[document.scripts.length - 1];
var loaderSrc = currentScript.src;
var baseUrl = loaderSrc.split('/').slice(0, -1).join('/') + '/';
function loadRelativeScript(src) {
importScript(baseUrl + src);
}
function importScript(src) {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = src;
script.defer = true;
// Setting async = false is important to make sure the script is imported
// before the 'load' event fires.
script.async = false;
document.head.appendChild(script);
}
window.CLOSURE_IMPORT_SCRIPT = importScript;
var fields = location.search.substr(1);
fields = fields ? fields.split(';') : [];
var fragments = location.hash.substr(1);
fragments = fragments ? fragments.split(';') : [];
var combined = fields.concat(fragments);
// Very old browsers do not have Array.prototype.indexOf.
var compiledMode = false;
for (var i = 0; i < combined.length; ++i) {
if (combined[i] == 'compiled') {
compiledMode = true;
break;
}
}
if (compiledMode) {
// This contains the entire library.
loadRelativeScript('../dist/shaka-player.compiled.js');
} else {
// In non-compiled mode, we load the closure library and the generated deps
// file to bootstrap the system. goog.require will load the rest.
loadRelativeScript('../third_party/closure/goog/base.js');
loadRelativeScript('../dist/deps.js');
// This file contains goog.require calls for all exported classes.
loadRelativeScript('../shaka-player.uncompiled.js');
}
})(); // anonymous namespace