mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
Renaming `shell-chrome` to `shell-browser` contains the build that supports both browsers. PR Close #44952
51 lines
1.6 KiB
TypeScript
51 lines
1.6 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google LLC All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
|
|
const loadScripts = (urls: string[]) => {
|
|
return urls
|
|
.map((url, idx) => {
|
|
return `
|
|
const script${idx} = document.constructor.prototype.createElement.call(document, 'script');
|
|
script${idx}.src = getScriptName("${url}");
|
|
document.documentElement.appendChild(script${idx});
|
|
script${idx}.parentNode.removeChild(script${idx});
|
|
`;
|
|
})
|
|
.join('\n');
|
|
};
|
|
|
|
let loaded = false;
|
|
export const injectScripts = (urls: string[], cb?: () => void) => {
|
|
if (loaded) {
|
|
// Not throwing a hard error here, because we don't want to stop the
|
|
// execution when folks are not using Trusted Types or when they have
|
|
// allowed redeclaration of a security policy.
|
|
console.error('Trying to reinject scripts');
|
|
}
|
|
loaded = true;
|
|
urls = urls.map((s) => chrome.runtime.getURL(s));
|
|
const script = `
|
|
(function () {
|
|
let policy = null;
|
|
if (window.trustedTypes && window.trustedTypes.createPolicy) {
|
|
policy = window.trustedTypes.createPolicy('angular#devtools', {
|
|
createScriptURL: url => ${JSON.stringify(urls)}.indexOf(url) >= 0 ? url : null
|
|
});
|
|
}
|
|
const getScriptName = name => policy ? policy.createScriptURL(name) : name;
|
|
${loadScripts(urls)}
|
|
})();
|
|
`;
|
|
chrome.devtools.inspectedWindow.eval(script, (_, err) => {
|
|
if (err) {
|
|
// tslint:disable-next-line:no-console
|
|
console.log(err);
|
|
}
|
|
cb?.();
|
|
});
|
|
};
|