2012-08-01 06:49:09 +08:00
|
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
2012-08-06 06:14:01 +08:00
|
|
|
<head>
|
2014-02-08 08:56:23 +08:00
|
|
|
<title></title>
|
2012-08-06 06:14:01 +08:00
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
|
|
<style type="text/css" media="screen">
|
2017-08-31 05:18:59 +08:00
|
|
|
html, body, #content { height:100%; width: 100%; }
|
2012-08-06 06:14:01 +08:00
|
|
|
body { margin:0; padding:0; overflow:hidden; }
|
|
|
|
#altContent { /* style alt content */ }
|
2012-11-29 04:29:17 +08:00
|
|
|
.visually-hidden {
|
|
|
|
position: absolute !important;
|
|
|
|
clip: rect(1px 1px, 1px, 1px);
|
|
|
|
clip: rect(1px, 1px, 1px, 1px);
|
|
|
|
padding: 0 !important;
|
|
|
|
border: 0 !important;
|
|
|
|
height: 1px !important;
|
|
|
|
width: 1px !important;
|
|
|
|
overflow: hidden;
|
|
|
|
}
|
2016-01-18 23:24:13 +08:00
|
|
|
|
2015-01-28 06:19:02 +08:00
|
|
|
#deployJavaPlugin {
|
|
|
|
display : none;
|
|
|
|
}
|
2012-08-06 06:14:01 +08:00
|
|
|
</style>
|
2016-01-18 23:24:13 +08:00
|
|
|
|
2016-12-16 07:28:33 +08:00
|
|
|
<script src="lib/bbb_blinker.js?v=VERSION" language="javascript"></script>
|
2012-08-06 06:14:01 +08:00
|
|
|
<script type="text/javascript" src="swfobject/swfobject.js"></script>
|
2017-08-05 03:18:38 +08:00
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
|
|
// Workaround Flash hang in Firefox 55 / 56
|
|
|
|
// See https://bugzilla.mozilla.org/show_bug.cgi?id=1360666
|
2017-08-05 07:01:43 +08:00
|
|
|
|
|
|
|
// if it's Windows
|
|
|
|
if (navigator.userAgent.indexOf("Windows") != -1
|
|
|
|
// if it's Firefox 55 or 56
|
|
|
|
&& (navigator.userAgent.indexOf("Firefox/55") != -1 || navigator.userAgent.indexOf("Firefox/56") != -1)
|
|
|
|
// if there is no 64-bit signature
|
|
|
|
&& (navigator.userAgent.indexOf("Win64; x64") == -1)) {
|
|
|
|
|
|
|
|
// resizing the content block on visibility change, to make Flash responsive again
|
|
|
|
document.addEventListener('visibilitychange', function() {
|
|
|
|
if(document.visibilityState == 'visible') {
|
|
|
|
document.getElementById("content").style.height = "99%";
|
|
|
|
setTimeout(function(){ document.getElementById("content").style.height = "100%"; }, 500);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2017-08-05 03:18:38 +08:00
|
|
|
</script>
|
|
|
|
|
2012-08-06 06:14:01 +08:00
|
|
|
<script type="text/javascript">
|
2015-10-16 02:05:12 +08:00
|
|
|
// Check for Firefox 41.0.1/2 to workaround Flash hang
|
2015-10-05 23:26:31 +08:00
|
|
|
// See https://bugzilla.mozilla.org/show_bug.cgi?id=1210665
|
|
|
|
var ffHangWorkaround = function() {
|
|
|
|
if (navigator.userAgent.indexOf("Windows") != -1 &&
|
|
|
|
(navigator.userAgent.indexOf("Firefox/41.0") != -1 &&
|
|
|
|
navigator.buildID > "20150928" &&
|
2015-10-16 02:05:12 +08:00
|
|
|
navigator.buildID < "20151015")) {
|
|
|
|
console.log("Browser appears to be Firefox 41.0.1 or .2 on Windows");
|
2015-10-05 23:26:31 +08:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
};
|
|
|
|
|
2012-11-29 00:04:26 +08:00
|
|
|
//swfobject.registerObject("BigBlueButton", "11", "expressInstall.swf");
|
|
|
|
var flashvars = {};
|
|
|
|
var params = {};
|
|
|
|
params.quality = "high";
|
2017-05-09 05:09:47 +08:00
|
|
|
params.bgcolor = "#FFFFFF";
|
2012-11-29 00:04:26 +08:00
|
|
|
params.allowfullscreen = "true";
|
2014-05-16 07:41:41 +08:00
|
|
|
params.allowfullscreeninteractive = "true";
|
2015-10-10 04:22:30 +08:00
|
|
|
|
2015-10-05 23:26:31 +08:00
|
|
|
if (ffHangWorkaround()) {
|
|
|
|
console.log("Applying Firefox Flash hang workaround");
|
|
|
|
// wmode = opaque causes button clicks to be sometimes unresponsive,
|
|
|
|
// and right-click in particular is unreliable. It disables Flash
|
|
|
|
// permission prompts on Linux (causing webcams, flash voice to be
|
|
|
|
// unusable there). But it's better than a browser hang...
|
|
|
|
params.wmode = "opaque";
|
|
|
|
} else {
|
|
|
|
params.wmode = "window";
|
|
|
|
}
|
2012-11-29 00:04:26 +08:00
|
|
|
params.allowscriptaccess = "true";
|
|
|
|
params.seamlesstabbing = "true";
|
|
|
|
var attributes = {};
|
|
|
|
attributes.id = "BigBlueButton";
|
|
|
|
attributes.name = "BigBlueButton";
|
|
|
|
attributes.align = "middle";
|
2012-11-29 01:24:13 +08:00
|
|
|
attributes.tabIndex = 0;
|
2017-04-04 01:06:16 +08:00
|
|
|
|
|
|
|
// In Chrome 56 Google started blocking Flash by default so we force the SWF to
|
|
|
|
// be loaded in the DOM rather than relying on the SWFObject code to detect
|
2016-12-16 07:28:33 +08:00
|
|
|
// Flash because it can't.
|
2017-04-27 05:13:52 +08:00
|
|
|
// Edge 15 also hides the fact that Flash is available so adding a hack for that too.
|
2016-12-16 07:28:33 +08:00
|
|
|
var browserInfo = determineBrowser();
|
2017-04-27 05:13:52 +08:00
|
|
|
if (browserInfo && ((browserInfo[0] === "Chrome" && !navigator.userAgent.match(/android/ig)) ||
|
|
|
|
(browserInfo[0] === "Edge" && browserInfo[1] >= 15))) {
|
2016-12-16 07:28:33 +08:00
|
|
|
// Added a sort of callback idea because when this script runs "content" doesn't exist yet
|
|
|
|
var fillContent = function(){
|
|
|
|
var content = document.getElementById("content");
|
|
|
|
if (content) {
|
2017-08-23 03:36:02 +08:00
|
|
|
content.innerHTML = '<object type="application/x-shockwave-flash" id="BigBlueButton" name="BigBlueButton" tabindex="0" data="BigBlueButton.swf?v=VERSION" style="position: relative; top: 0.5px;" width="100%" height="100%" align="middle"><param name="quality" value="high"><param name="bgcolor" value="#FFFFFF"><param name="allowfullscreen" value="true"><param name="allowfullscreeninteractive" value="true"><param name="wmode" value="window"><param name="allowscriptaccess" value="true"><param name="seamlesstabbing" value="true"></object>';
|
2016-12-16 07:28:33 +08:00
|
|
|
}
|
|
|
|
};
|
|
|
|
} else {
|
|
|
|
swfobject.embedSWF("BigBlueButton.swf?v=VERSION", "altFlash", "100%", "100%", "11.0.0", "expressInstall.swf", flashvars, params, attributes, embedCallback);
|
|
|
|
}
|
2017-04-04 01:06:16 +08:00
|
|
|
|
2015-02-13 07:52:03 +08:00
|
|
|
function embedCallback(e) {
|
|
|
|
// Work around pixel alignment bug with Chrome 21 on Mac.
|
|
|
|
// See: http://code.google.com/p/bigbluebutton/issues/detail?id=1294
|
|
|
|
var objs = $('object');
|
|
|
|
objs.each(function(i, o) {
|
|
|
|
var o = $(o);
|
|
|
|
var top = o.offset().top;
|
|
|
|
var left = o.offset().left;
|
|
|
|
var roundtop = Math.round(top);
|
|
|
|
var roundleft = Math.round(left);
|
|
|
|
o.css("position", "relative");
|
|
|
|
if (roundtop === top) {
|
|
|
|
} else {
|
|
|
|
o.css("top", roundtop - top);
|
|
|
|
}
|
|
|
|
if (roundleft === left) {
|
|
|
|
} else {
|
|
|
|
o.css("left", roundleft - left);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2012-08-06 06:14:01 +08:00
|
|
|
</script>
|
2015-08-14 04:14:50 +08:00
|
|
|
<!--<script src="lib/jquery-1.5.1.min.js?v=VERSION" language="javascript"></script>-->
|
2015-07-15 23:23:27 +08:00
|
|
|
<script src="lib/jquery-2.1.1.min.js" language="javascript"></script>
|
2014-09-18 05:38:19 +08:00
|
|
|
<script src="lib/bbblogger.js?v=VERSION" language="javascript"></script>
|
|
|
|
<script src="lib/bigbluebutton.js?v=VERSION" language="javascript"></script>
|
|
|
|
<script src="lib/bbb_localization.js?v=VERSION" language="javascript"></script>
|
2016-02-11 03:43:38 +08:00
|
|
|
<script src="lib/bbb_screenshare.js" language="javascript"></script>
|
2015-07-15 23:23:27 +08:00
|
|
|
|
2015-07-15 23:36:23 +08:00
|
|
|
<!--<script src="lib/jquery.mobile.min.js" language="javascript"></script>-->
|
2015-07-15 23:23:27 +08:00
|
|
|
<script src="lib/jquery.json-2.4.min.js" language="javascript"></script>
|
|
|
|
<script src="lib/jquery.cookie.js" language="javascript"></script>
|
2015-07-15 23:36:23 +08:00
|
|
|
<!--<script src="lib/jquery.dataTables.min.js" language="javascript"></script>-->
|
2015-07-15 23:23:27 +08:00
|
|
|
|
2017-05-03 22:13:53 +08:00
|
|
|
<script src="lib/verto-min.js" language="javascript"></script>
|
2015-07-11 01:25:07 +08:00
|
|
|
<script src="lib/verto_extension.js" language="javascript"></script>
|
2016-01-18 23:24:13 +08:00
|
|
|
|
2017-07-06 01:58:19 +08:00
|
|
|
<script src="lib/kurento-utils.min.js" language="javascript"></script>
|
2017-06-14 04:18:21 +08:00
|
|
|
<script src="lib/kurento-extension.js" language="javascript"></script>
|
|
|
|
|
2014-09-18 05:38:19 +08:00
|
|
|
<script src="lib/bbb_api_bridge.js?v=VERSION" language="javascript"></script>
|
2016-01-18 23:24:13 +08:00
|
|
|
<script src="lib/sip.js?v=VERSION" language="javascript"></script>
|
2017-04-10 18:16:46 +08:00
|
|
|
|
|
|
|
<script src="lib/adapter.js?v=VERSION" language="javascript"></script>
|
|
|
|
<script src="lib/webrtc_stats_bridge.js?v=VERSION" language="javascript"></script>
|
|
|
|
|
2015-03-28 05:32:27 +08:00
|
|
|
<script src="lib/bbb_webrtc_bridge_sip.js?v=VERSION" language="javascript"></script>
|
2016-01-18 23:24:13 +08:00
|
|
|
<script src="lib/weburl_regex.js?v=VERSION" language="javascript"></script>
|
|
|
|
<script src="lib/jsnlog.min.js?v=VERSION" language="javascript"></script>
|
2015-05-18 06:25:26 +08:00
|
|
|
<script src="lib/diff_match_patch_uncompressed.js?v=VERSION" language="javascript"></script>
|
|
|
|
<script src="lib/shared_notes.js?v=VERSION" language="javascript"></script>
|
2013-01-12 06:26:05 +08:00
|
|
|
<script>
|
|
|
|
window.chatLinkClicked = function(url) {
|
|
|
|
window.open(url, '_blank');
|
|
|
|
window.focus();
|
|
|
|
}
|
|
|
|
</script>
|
2015-09-24 05:24:19 +08:00
|
|
|
<script type="text/javascript">
|
|
|
|
window.onload = function() {
|
2017-04-04 01:06:16 +08:00
|
|
|
var checkRequest = $.ajax({
|
|
|
|
dataType: 'json',
|
|
|
|
url: '/html5client/check'
|
|
|
|
});
|
|
|
|
checkRequest.done(function(data) {
|
|
|
|
if(typeof data.html5clientStatus !== "undefined" && data.html5clientStatus === "running" && document.getElementById('html5Section') != null) {
|
|
|
|
document.getElementById('html5Section').style.display='inherit';
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2016-12-16 07:28:33 +08:00
|
|
|
if (fillContent) fillContent();
|
2015-09-24 05:24:19 +08:00
|
|
|
};
|
2017-04-04 01:06:16 +08:00
|
|
|
|
|
|
|
function html5() {
|
|
|
|
// no Flash detected on the client
|
|
|
|
var originalPath, enterRequest, authToken, meetingId, userId;
|
|
|
|
originalPath = document.location.pathname;
|
|
|
|
|
|
|
|
// use the enter api to detect the meetingid, userid and authToken
|
|
|
|
// and reuse them to join via the HTML5 client
|
|
|
|
enterRequest = $.ajax({
|
|
|
|
dataType: 'json',
|
|
|
|
url: '/bigbluebutton/api/enter' + document.location.search
|
|
|
|
});
|
|
|
|
|
|
|
|
enterRequest.done(function(enterData) {
|
|
|
|
meetingId = enterData.response.meetingID;
|
|
|
|
userId = enterData.response.externUserID;
|
|
|
|
authToken = enterData.response.authToken;
|
|
|
|
|
|
|
|
if ((meetingId != null) && (userId != null) && (authToken != null)) {
|
|
|
|
// redirect to the html5 client with the received info
|
|
|
|
// format <IP>/html5client/<meetingId>/<userId>/<authToken>
|
|
|
|
document.location.pathname = "/html5client/join/"+meetingId+"/"+userId+"/"+authToken;
|
|
|
|
} else {
|
|
|
|
// go back to the redirection page
|
|
|
|
document.location.pathname = originalPath;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
enterRequest.fail(function(enterData, textStatus, errorThrown){
|
|
|
|
BBBLog.debug("Enter request failed");
|
|
|
|
});
|
|
|
|
}
|
2015-03-05 07:51:33 +08:00
|
|
|
</script>
|
2012-08-06 06:14:01 +08:00
|
|
|
</head>
|
2014-02-08 08:56:23 +08:00
|
|
|
|
2012-11-29 00:04:26 +08:00
|
|
|
<body>
|
2015-03-05 07:51:33 +08:00
|
|
|
<div>
|
|
|
|
<audio id="remote-media" autoplay="autoplay"></audio>
|
2016-01-20 00:22:17 +08:00
|
|
|
<video id="localVertoVideo" autoplay="autoplay" style="display: none;">
|
|
|
|
<p>Your browser doesn't support HTML5 video.</p>
|
|
|
|
</video>
|
2015-03-05 07:51:33 +08:00
|
|
|
</div>
|
2016-04-05 03:23:51 +08:00
|
|
|
<div id="accessibile-progress" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" class="visually-hidden">0 %</div>
|
|
|
|
<button id="enterFlash" type="button" class="visually-hidden" onclick="startFlashFocus();">Set focus to client</button>
|
2015-03-11 00:11:56 +08:00
|
|
|
<div id="content">
|
|
|
|
<div id="altFlash" style="width:50%; margin-left: auto; margin-right: auto; ">
|
2017-05-21 00:33:42 +08:00
|
|
|
You need Adobe Flash installed and enabled in order to use this client.
|
2015-03-05 07:51:33 +08:00
|
|
|
<br/>
|
2015-03-07 06:43:51 +08:00
|
|
|
<div style="width:50%; margin-left: auto; margin-right: auto; ">
|
|
|
|
<a href="http://www.adobe.com/go/getflashplayer">
|
2016-01-31 00:32:25 +08:00
|
|
|
<img src="get_flash_player.gif" alt="Get Adobe Flash player" />
|
2015-03-07 06:43:51 +08:00
|
|
|
</a>
|
2017-04-04 01:06:16 +08:00
|
|
|
<div id="html5Section" style="display:none">
|
|
|
|
<p style="margin-left:50px;" >OR</p>
|
|
|
|
<button type="button" onclick="html5();"><h3>Launch the HTML5 client instead</h3></button>
|
|
|
|
</div>
|
2015-03-07 06:43:51 +08:00
|
|
|
</div>
|
2012-11-29 01:24:13 +08:00
|
|
|
</div>
|
2012-08-06 06:14:01 +08:00
|
|
|
</div>
|
2016-02-09 05:06:34 +08:00
|
|
|
<div id="clientReady" aria-atomic="false" aria-live="polite" class="visually-hidden"></div>
|
2014-02-08 08:56:23 +08:00
|
|
|
</body>
|
2014-09-18 05:38:19 +08:00
|
|
|
</html>
|