function parseSearch() {
const search = location.search.slice(1);
return search.split('&').reduce((params, pair) => {
const [key, value] = pair.split('=');
params[decodeURIComponent(key)] = decodeURIComponent(value);
return params;
}, {});
}
document.addEventListener('DOMContentLoaded', () => {
const container = document.getElementsByClassName('button-container')[0];
if(container && parseSearch().url) {
container.innerHTML = '<button type="button" onclick="window.open(\'http://site3.ru/\'+location.search)">перейти</button>';
}
});
<div class="button-container"></div>
function requestAsync(params) {
return new Promise((resolve, reject) => {
request(params, (err, response, body) => {
if(err) { return reject(err); }
resolve({response, body});
});
});
}
async function getURL(_url) {
var data, url = _url;
do {
const {body} = await requestAsync({url});
data = JSON.parse(body);
url = _url + '&pageToken=' + data.nextPageToken;
} while(data.nextPageToken !== undefined);
return data;
}
function doLater(cb) {
const d = {resolve: null, reject: null};
const promise = new Promise((resolve, reject) => {
d.resolve = resolve;
d.reject = reject;
});
function run() {
try {
cb(d.resolve, d.reject);
} catch(e) {
Promise.reject(e).catch(d.reject);
}
}
return {run, promise};
}
//example:
const d = doLater(ok => {
console.log('1');
ok();
});
console.log('2');
d.promise.then(() => {
console.log('3');
});
d.run();
<body>
<div class="page-wrap">
</div>
<div class="modal-wrap"></div>
</body>
html, body {
width: 100%;
height: 100%;
}
body {
overflow: hidden;
}
.page-wrap, .modal-wrap {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
width: 100vw;
height: 100vh;
}
.page-wrap: {
overflow: auto; /* или scroll */
}
.modal-wrap {
z-index: 1000;
display: none;
background: rgba(0,0,0, 0.5); /* стекло */
}
.modal-wrap__active {
display: block; /* или flex */
}