131 lines
4.6 KiB
JavaScript
131 lines
4.6 KiB
JavaScript
goog.provide("goog.window");
|
|
goog.require("goog.dom");
|
|
goog.require("goog.dom.TagName");
|
|
goog.require("goog.dom.safe");
|
|
goog.require("goog.html.SafeUrl");
|
|
goog.require("goog.html.uncheckedconversions");
|
|
goog.require("goog.labs.userAgent.platform");
|
|
goog.require("goog.string");
|
|
goog.require("goog.string.Const");
|
|
goog.require("goog.userAgent");
|
|
goog.requireType("goog.string.TypedString");
|
|
goog.window.DEFAULT_POPUP_HEIGHT = 500;
|
|
goog.window.DEFAULT_POPUP_WIDTH = 690;
|
|
goog.window.DEFAULT_POPUP_TARGET = "google_popup";
|
|
goog.window.createFakeWindow_ = function() {
|
|
return {};
|
|
};
|
|
goog.window.open = function(linkRef, opt_options, opt_parentWin) {
|
|
if (!opt_options) {
|
|
opt_options = {};
|
|
}
|
|
var parentWin = opt_parentWin || window;
|
|
var safeLinkRef;
|
|
if (linkRef instanceof goog.html.SafeUrl) {
|
|
safeLinkRef = linkRef;
|
|
} else {
|
|
var url = typeof linkRef.href != "undefined" ? linkRef.href : String(linkRef);
|
|
safeLinkRef = goog.html.SafeUrl.sanitize(url);
|
|
}
|
|
const browserSupportsCoop = self.crossOriginIsolated !== undefined;
|
|
let referrerPolicy = "strict-origin-when-cross-origin";
|
|
if (window.Request) {
|
|
referrerPolicy = (new Request("/")).referrerPolicy;
|
|
}
|
|
const pageSetsUnsafeReferrerPolicy = referrerPolicy === "unsafe-url";
|
|
let noReferrerOption = opt_options["noreferrer"];
|
|
if (browserSupportsCoop && noReferrerOption) {
|
|
if (pageSetsUnsafeReferrerPolicy) {
|
|
throw new Error("Cannot use the noreferrer option on a page that sets a referrer-policy of `unsafe-url` in modern browsers!");
|
|
}
|
|
noReferrerOption = false;
|
|
}
|
|
var target = opt_options.target || linkRef.target;
|
|
var sb = [];
|
|
for (var option in opt_options) {
|
|
switch(option) {
|
|
case "width":
|
|
case "height":
|
|
case "top":
|
|
case "left":
|
|
sb.push(option + "\x3d" + opt_options[option]);
|
|
break;
|
|
case "target":
|
|
case "noopener":
|
|
case "noreferrer":
|
|
break;
|
|
default:
|
|
sb.push(option + "\x3d" + (opt_options[option] ? 1 : 0));
|
|
}
|
|
}
|
|
var optionString = sb.join(",");
|
|
var newWin;
|
|
if (goog.labs.userAgent.platform.isIos() && parentWin.navigator && parentWin.navigator["standalone"] && target && target != "_self") {
|
|
var a = goog.dom.createElement(goog.dom.TagName.A);
|
|
goog.dom.safe.setAnchorHref(a, safeLinkRef);
|
|
a.target = target;
|
|
if (noReferrerOption) {
|
|
a.rel = "noreferrer";
|
|
}
|
|
var click = document.createEvent("MouseEvent");
|
|
click.initMouseEvent("click", true, true, parentWin, 1);
|
|
a.dispatchEvent(click);
|
|
newWin = goog.window.createFakeWindow_();
|
|
} else if (noReferrerOption) {
|
|
newWin = goog.dom.safe.openInWindow("", parentWin, target, optionString);
|
|
var sanitizedLinkRef = goog.html.SafeUrl.unwrap(safeLinkRef);
|
|
if (newWin) {
|
|
if (goog.userAgent.EDGE_OR_IE) {
|
|
if (goog.string.contains(sanitizedLinkRef, ";")) {
|
|
sanitizedLinkRef = "'" + sanitizedLinkRef.replace(/'/g, "%27") + "'";
|
|
}
|
|
}
|
|
newWin.opener = null;
|
|
if (sanitizedLinkRef === "") {
|
|
sanitizedLinkRef = "javascript:''";
|
|
}
|
|
var safeHtml = goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract(goog.string.Const.from("b/12014412, meta tag with sanitized URL"), '\x3cmeta name\x3d"referrer" content\x3d"no-referrer"\x3e' + '\x3cmeta http-equiv\x3d"refresh" content\x3d"0; url\x3d' + goog.string.htmlEscape(sanitizedLinkRef) + '"\x3e');
|
|
var newDoc = newWin.document;
|
|
if (newDoc && newDoc.write) {
|
|
goog.dom.safe.documentWrite(newDoc, safeHtml);
|
|
newDoc.close();
|
|
}
|
|
}
|
|
} else {
|
|
newWin = goog.dom.safe.openInWindow(safeLinkRef, parentWin, target, optionString);
|
|
if (newWin && opt_options["noopener"]) {
|
|
newWin.opener = null;
|
|
}
|
|
if (newWin && opt_options["noreferrer"]) {
|
|
newWin.opener = null;
|
|
}
|
|
}
|
|
return newWin;
|
|
};
|
|
goog.window.openBlank = function(opt_message, opt_options, opt_parentWin) {
|
|
const win = goog.window.open("", opt_options, opt_parentWin);
|
|
if (win && opt_message) {
|
|
const body = win.document.body;
|
|
if (body) {
|
|
body.textContent = opt_message;
|
|
}
|
|
}
|
|
return win;
|
|
};
|
|
goog.window.popup = function(linkRef, opt_options) {
|
|
if (!opt_options) {
|
|
opt_options = {};
|
|
}
|
|
opt_options["target"] = opt_options["target"] || linkRef["target"] || goog.window.DEFAULT_POPUP_TARGET;
|
|
opt_options["width"] = opt_options["width"] || goog.window.DEFAULT_POPUP_WIDTH;
|
|
opt_options["height"] = opt_options["height"] || goog.window.DEFAULT_POPUP_HEIGHT;
|
|
var newWin = goog.window.open(linkRef, opt_options);
|
|
if (!newWin) {
|
|
return true;
|
|
}
|
|
newWin.focus();
|
|
return false;
|
|
};
|
|
|
|
//# sourceMappingURL=goog.window.window.js.map
|