Meta Description" name="description" />
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<script>
window.LUNA_PLAYGROUND_PACKAGE_CONFIG = {
iosLink: "{HTML_CLICK_URL}",
androidLink: "{HTML_CLICK_URL}"
};
</script>
<!-- add you unity luna code here -->
<script src="https://assets.lunalabs.io/cdn/7d0d96e2a89b22162e77b55eac636cb0/data/js/trampoline.js" data-relative-src="js/trampoline.js"></script>
<script src="https://assets-1.lunalabs.io/cdn/7d0d96e2a89b22162e77b55eac636cb0/data/assets/scripts.js" data-relative-src="assets/scripts.js"></script>
<script src="https://assets-3.lunalabs.io/cdn/7d0d96e2a89b22162e77b55eac636cb0/data/assets/jsons.js" data-relative-src="assets/jsons.js"></script>
<script src="https://assets-2.lunalabs.io/cdn/7d0d96e2a89b22162e77b55eac636cb0/data/assets/blobs.js" data-relative-src="assets/blobs.js"></script>
<!-- //end unity luna code-->
<script>
// Universal External URL Replacement Engine
(function() {
var CONFIG = window.LUNA_PLAYGROUND_PACKAGE_CONFIG;
var DEBUG = new URLSearchParams(window.location.search).get('debug') === '1';
var domain = window.location.hostname;
function isExternal(url) {
if (!url || typeof url !== 'string') return false;
if (!/^https?:\/\//i.test(url)) return false;
try { return new URL(url).hostname !== domain; } catch(e) { return false; }
}
function replacement() {
if (!CONFIG) return null;
return /iphone|ipad|ipod|macintosh/i.test(navigator.userAgent.toLowerCase())
? CONFIG.iosLink : CONFIG.androidLink;
}
function process(url) {
if (!CONFIG || !isExternal(url)) return url;
var r = replacement();
if (DEBUG) console.log('\uD83D\uDD04 Replacing:', url, '\u2192', r);
return r;
}
if (!CONFIG) { if (DEBUG) console.log('\u2139\uFE0F No config — URL replacement disabled'); return; }
// Layer 1: window.open
(function() {
var orig = window.open;
window.open = function(url, target, features) { return orig.call(this, process(url), target || '_blank', features); };
})();
// Layer 2: window.location
(function() {
try { var d = Object.getOwnPropertyDescriptor(window.location, 'assign') || Object.getOwnPropertyDescriptor(Object.getPrototypeOf(window.location), 'assign'); if (!d || d.writable !== false) { var oa = window.location.assign; window.location.assign = function(u) { return oa.call(window.location, process(u)); }; } } catch(e) {}
try { var dr = Object.getOwnPropertyDescriptor(window.location, 'replace') || Object.getOwnPropertyDescriptor(Object.getPrototypeOf(window.location), 'replace'); if (!dr || dr.writable !== false) { var or = window.location.replace; window.location.replace = function(u) { return or.call(window.location, process(u)); }; } } catch(e) {}
try { var ld = Object.getOwnPropertyDescriptor(window.location, 'href'); if (!ld || ld.configurable) { Object.defineProperty(window.location, 'href', { set: function(u) { window.location.assign(process(u)); }, get: function() { return window.location.toString(); } }); } } catch(e) {}
})();
// Layer 3: MRAID
(function() {
var mv;
Object.defineProperty(window, 'mraid', {
get: function() { return mv; },
set: function(v) {
if (v && typeof v.open === 'function') {
var mo = v.open;
v.open = function(u) { return mo.call(this, process(u)); };
if (DEBUG) console.log('\u2705 MRAID overridden');
}
mv = v;
},
configurable: true
});
})();
// Layer 4: link clicks
document.addEventListener('click', function(e) {
var t = e.target;
while (t && t.tagName !== 'A') { t = t.parentElement; if (!t) return; }
if (t.href && isExternal(t.href)) { e.preventDefault(); e.stopPropagation(); window.open(replacement(), t.target || '_blank'); }
}, true);
if (DEBUG) console.log('\u2705 URL replacement engine active');
})();
</script>
<script>
if (new URLSearchParams(window.location.search).get('debug') === '1') {
setTimeout(function() {
if (typeof mraidbridge !== 'undefined') {
mraidbridge.setScreenSize(window.screen.width, window.screen.height);
mraidbridge.setMaxSize(window.innerWidth, window.innerHeight);
mraidbridge.setCurrentPosition(0, 0, window.innerWidth, window.innerHeight);
mraidbridge.setDefaultPosition(0, 0, window.innerWidth, window.innerHeight);
mraidbridge.setPlacementType('inline');
mraidbridge.setState('default');
mraidbridge.setIsViewable(true);
mraidbridge.setSupports(true, true, false, false, true);
mraidbridge.notifyReadyEvent();
}
}, 500);
}
</script>
</body>
</html>66
35
5251KB
6150KB
1,822.0ms
408.0ms
1,835.0ms