var unityWebView = { loaded: [], init : function (name) { $containers = $('.webviewContainer'); if ($containers.length === 0) { $('
') .appendTo($('#gameContainer')); } var $last = $('.webviewContainer:last'); var clonedTop = parseInt($last.css('top')) - 100; var $clone = $last.clone().insertAfter($last).css('top', clonedTop + '%'); var $iframe = $('') .attr('id', 'webview_' + name) .appendTo($last) .on('load', function () { $(this).attr('loaded', 'true'); var contents = $(this).contents(); var w = $(this)[0].contentWindow; contents.find('a').click(function (e) { var href = $.trim($(this).attr('href')); if (href.substr(0, 6) === 'unity:') { unityInstance.SendMessage(name, "CallFromJS", href.substring(6, href.length)); e.preventDefault(); } }); contents.find('form').submit(function () { $this = $(this); var action = $.trim($this.attr('action')); if (action.substr(0, 6) === 'unity:') { var message = action.substring(6, action.length); if ($this.attr('method').toLowerCase() == 'get') { message += '?' + $this.serialize(); } unityInstance.SendMessage(name, "CallFromJS", message); return false; } return true; }); unityInstance.SendMessage(name, "CallOnLoaded", location.href); }); }, sendMessage: function (name, message) { unityInstance.SendMessage(name, "CallFromJS", message); }, setMargins: function (name, left, top, right, bottom) { var container = $('#gameContainer'); var r = window.devicePixelRatio; var w0 = container.width() * r; var h0 = container.height() * r; var lp = left / w0 * 100; var tp = top / h0 * 100; var wp = (w0 - left - right) / w0 * 100; var hp = (h0 - top - bottom) / h0 * 100; this.iframe(name) .css('left', lp + '%') .css('top', tp + '%') .css('width', wp + '%') .css('height', hp + '%'); }, setVisibility: function (name, visible) { if (visible) this.iframe(name).show(); else this.iframe(name).hide(); }, loadURL: function(name, url) { this.iframe(name).attr('loaded', 'false')[0].contentWindow.location.replace(url); }, evaluateJS: function (name, js) { $iframe = this.iframe(name); if ($iframe.attr('loaded') === 'true') { $iframe[0].contentWindow.eval(js); } else { $iframe.on('load', function(){ $(this)[0].contentWindow.eval(js); }); } }, destroy: function (name) { this.iframe(name).parent().parent().remove(); }, iframe: function (name) { return $('#webview_' + name); }, };