Skip to content

Commit c4e7bb9

Browse files
committed
Merged & Closed muaz-khan#62 Fixed muaz-khan#64
1 parent 344a75c commit c4e7bb9

File tree

8 files changed

+96
-29
lines changed

8 files changed

+96
-29
lines changed

DetectRTC.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
// Last Updated On: 2018-04-30 5:22:34 PM UTC
3+
// Last Updated On: 2018-05-05 12:25:07 PM UTC
44

55
// ________________
66
// DetectRTC v1.3.6
@@ -856,15 +856,17 @@
856856
isScreenCapturingSupported = true;
857857
} else if (DetectRTC.browser.isFirefox && DetectRTC.browser.version >= 34) {
858858
isScreenCapturingSupported = true;
859+
} else if (DetectRTC.browser.isEdge && DetectRTC.browser.version >= 17) {
860+
isScreenCapturingSupported = true; // navigator.getDisplayMedia
861+
} else if (DetectRTC.osName === 'Android' && DetectRTC.browser.isChrome) {
862+
isScreenCapturingSupported = true;
859863
}
860864

861865
if (!/^(https:|chrome-extension:)$/g.test(location.protocol || '')) {
862-
if (typeof document !== 'undefined' && typeof document.domain === 'string' && document.domain.search && document.domain.search(/localhost|127.0./g) === -1) {
863-
// DetectRTC.browser.isChrome
866+
var isNonLocalHost = typeof document !== 'undefined' && typeof document.domain === 'string' && document.domain.search && document.domain.search(/localhost|127.0./g) === -1;
867+
if (isNonLocalHost && (DetectRTC.browser.isChrome || DetectRTC.browser.isEdge || DetectRTC.browser.isOpera)) {
864868
isScreenCapturingSupported = false;
865-
}
866-
867-
if (DetectRTC.browser.isFirefox) {
869+
} else if (DetectRTC.browser.isFirefox) {
868870
isScreenCapturingSupported = false;
869871
}
870872
}
@@ -1079,6 +1081,9 @@
10791081

10801082
DetectRTC.isPromisesSupported = !!('Promise' in window);
10811083

1084+
// version is generated by "grunt"
1085+
DetectRTC.version = '1.3.6';
1086+
10821087
if (typeof DetectRTC === 'undefined') {
10831088
window.DetectRTC = {};
10841089
}

DetectRTC.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Gruntfile.js

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,26 @@ module.exports = function(grunt) {
4848
'dev/Objects.js',
4949
'dev/tail.js'
5050
],
51-
dest: 'DetectRTC.js',
51+
dest: './temp/DetectRTC.js',
5252
},
5353
},
54-
jshint: {
55-
options: {
56-
ignores: [],
57-
// use default .jshintrc files
58-
jshintrc: true
59-
},
60-
files: ['DetectRTC.js']
54+
replace: {
55+
dist: {
56+
options: {
57+
patterns: [{
58+
match: 'version',
59+
replacement: versionNumber
60+
}]
61+
},
62+
files: [{
63+
expand: true,
64+
flatten: true,
65+
src: ['./temp/DetectRTC.js'],
66+
dest: './'
67+
}]
68+
}
6169
},
70+
clean: ['./temp'],
6271
uglify: {
6372
options: {
6473
mangle: false,
@@ -134,5 +143,5 @@ module.exports = function(grunt) {
134143

135144
// set default tasks to run when grunt is called without parameters
136145
// http://gruntjs.com/api/grunt.task
137-
grunt.registerTask('default', ['concat', 'jsbeautifier', /*'jshint',*/ 'uglify']);
146+
grunt.registerTask('default', ['concat', 'replace', 'jsbeautifier', 'uglify', 'clean']);
138147
};

README.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ node npm-test.js
126126
You can even link specific versions:
127127

128128
```html
129-
<script src="https://github.com/muaz-khan/DetectRTC/releases/download/1.3.5/DetectRTC.js"></script>
129+
<script src="https://github.com/muaz-khan/DetectRTC/releases/download/1.3.6/DetectRTC.js"></script>
130130
```
131131

132132
<img src="https://cdn.webrtc-experiment.com/images/DetectRTC.png" style="width:100%;" />
@@ -144,7 +144,7 @@ DetectRTC.load(function() {
144144
DetectRTC.hasWebcam; // (has webcam device!)
145145
DetectRTC.hasMicrophone; // (has microphone device!)
146146
DetectRTC.hasSpeakers; // (has speakers!)
147-
DetectRTC.isScreenCapturingSupported;
147+
DetectRTC.isScreenCapturingSupported; // Chrome, Firefox, Opera, Edge and Android
148148
DetectRTC.isSctpDataChannelsSupported;
149149
DetectRTC.isRtpDataChannelsSupported;
150150
DetectRTC.isAudioContextSupported;
@@ -184,9 +184,19 @@ DetectRTC.load(function() {
184184
});
185185
```
186186

187+
# `DetectRTC.version`
188+
189+
DetectRTC is supporting `version` property since `1.3.6`.
190+
191+
``javascript
192+
if(DetectRTC.version === '1.3.6') {
193+
alert('We are using DetectRTC version 1.3.6');
194+
}
195+
```
196+
187197
# Why `load` method?
188198
189-
If you're not detecting audio/video input/outupt devices then you can skip this method.
199+
If you're not detecting audio/video input/output devices then you can skip this method.
190200
191201
`DetectRTC.load` simply makes sure that all devices are captured and valid result is set for relevant properties.
192202

dev/DetectRTC.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,17 @@ if (DetectRTC.browser.isChrome && DetectRTC.browser.version >= 35) {
3939
isScreenCapturingSupported = true;
4040
} else if (DetectRTC.browser.isFirefox && DetectRTC.browser.version >= 34) {
4141
isScreenCapturingSupported = true;
42+
} else if (DetectRTC.browser.isEdge && DetectRTC.browser.version >= 17) {
43+
isScreenCapturingSupported = true; // navigator.getDisplayMedia
44+
} else if (DetectRTC.osName === 'Android' && DetectRTC.browser.isChrome) {
45+
isScreenCapturingSupported = true;
4246
}
4347

4448
if (!/^(https:|chrome-extension:)$/g.test(location.protocol || '')) {
45-
if (typeof document !== 'undefined' && typeof document.domain === 'string' && document.domain.search && document.domain.search(/localhost|127.0./g) === -1) {
46-
// DetectRTC.browser.isChrome
49+
var isNonLocalHost = typeof document !== 'undefined' && typeof document.domain === 'string' && document.domain.search && document.domain.search(/localhost|127.0./g) === -1;
50+
if (isNonLocalHost && (DetectRTC.browser.isChrome || DetectRTC.browser.isEdge || DetectRTC.browser.isOpera)) {
4751
isScreenCapturingSupported = false;
48-
}
49-
50-
if (DetectRTC.browser.isFirefox) {
52+
} else if (DetectRTC.browser.isFirefox) {
5153
isScreenCapturingSupported = false;
5254
}
5355
}
@@ -261,3 +263,6 @@ if (DetectRTC.browser.isFirefox && DetectRTC.browser.version >= 43) {
261263
DetectRTC.isMultiMonitorScreenCapturingSupported = isMultiMonitorScreenCapturingSupported;
262264

263265
DetectRTC.isPromisesSupported = !!('Promise' in window);
266+
267+
// version is generated by "grunt"
268+
DetectRTC.version = '@@version';

index.html

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<script>window.demoVersion = '2018.04.05';</script>
1+
<script>window.demoVersion = '2018.05.05';</script>
22

33
<!--
44
> Muaz Khan - www.MuazKhan.com
@@ -77,7 +77,7 @@
7777
Script used to detect WebRTC features!
7878
https://github.com/muaz-khan/DetectRTC#how-to-link
7979
-->
80-
<script src="https://cdn.WebRTC-Experiment.com/DetectRTC.js"> </script>
80+
<script src="https://cdn.webrtc-experiment.com/DetectRTC.js"> </script>
8181
<script src="https://cdn.webrtc-experiment.com/screenshot.js"></script>
8282
<script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
8383
</head>
@@ -241,7 +241,7 @@ <h2 id="welcome">DetectRTC!</h2>
241241
appendTR('Browser Supports WebAudio API?', printVal(DetectRTC.isAudioContextSupported), 'isAudioContextSupported');
242242
appendTR('Browser Supports SCTP Data Channels?', printVal(DetectRTC.isSctpDataChannelsSupported), 'isSctpDataChannelsSupported');
243243
appendTR('Browser Supports RTP Data Channels?', printVal(DetectRTC.isRtpDataChannelsSupported), 'isRtpDataChannelsSupported');
244-
appendTR('This page Supports Screen Capturing API?', printVal(DetectRTC.isScreenCapturingSupported), 'isScreenCapturingSupported');
244+
appendTR('This page Supports Screen Capturing API?' + getInfoDiv('infoIcon-isScreenCapturingSupported'), printVal(DetectRTC.isScreenCapturingSupported), 'isScreenCapturingSupported');
245245

246246
appendTR('Does Browser Support multi-monitor selection & capturing screen of any monitor?', printVal(DetectRTC.isMultiMonitorScreenCapturingSupported), 'isMultiMonitorScreenCapturingSupported');
247247

@@ -292,6 +292,38 @@ <h2 id="welcome">DetectRTC!</h2>
292292
// appendTR(DetectRTC.MediaStream === false ? 'Your system does NOT supports MediaStream.' : 'Your system supports MediaStream.', '<strong>MediaStream.prototype:</strong><br>' + DetectRTC.MediaStream.toString().split(',').join(', '), 'MediaStream');
293293
// appendTR(DetectRTC.MediaStreamTrack === false ? 'Your system does NOT supports MediaStreamTrack.' : 'Your system supports MediaStreamTrack.', '<strong>MediaStreamTrack.prototype:</strong><br>' + DetectRTC.MediaStreamTrack.toString().split(',').join(', '), 'MediaStreamTrack');
294294
// appendTR(DetectRTC.RTCPeerConnection === false ? 'Your system does NOT supports RTCPeerConnection API.' : 'Your system supports RTCPeerConnection API.', '<strong>RTCPeerConnection.prototype:</strong><br>' + DetectRTC.RTCPeerConnection.toString().split(',').join(', '), 'RTCPeerConnection');
295+
document.getElementById('infoIcon-isScreenCapturingSupported').onclick = function() {
296+
var pre = this.parentNode.querySelector('pre');
297+
if(pre) {
298+
pre.parentNode.removeChild(pre);
299+
return;
300+
}
301+
302+
pre = document.createElement('pre');
303+
pre.className = 'sh_javascript inline-pre';
304+
pre.innerHTML += '\
305+
# Edge &gt= 17<br>\
306+
navigator.getDisplayMedia({<br>\
307+
video: true<br>\
308+
}).then(screenStream => {<br>\
309+
video.srcObject = screenStream;<br>\
310+
}, error => {<br>\
311+
alert(error);<br>\
312+
});<br>\
313+
<br>\
314+
# Firefox<br>\
315+
navigator.mediaDevices.getUserMedia({<br>\
316+
video: {<br>\
317+
mediaSource: \'window\' || \'screen\'<br>\
318+
}<br>\
319+
}).then(function(screenStream) {<br>\
320+
video.srcObject = screenStream;<br>\
321+
});<br><br>\
322+
# Chrome+Opera desktopCapture API i.e. extension';
323+
this.parentNode.appendChild(pre);
324+
pre.focus();
325+
sh_highlightDocument();
326+
};
295327

296328
document.getElementById('infoIcon-set-sink-id').onclick = function() {
297329
var pre = this.parentNode.querySelector('pre');
@@ -442,6 +474,10 @@ <h2 id="welcome">DetectRTC!</h2>
442474
type: contentType
443475
});
444476
}
477+
478+
if(DetectRTC.version) {
479+
document.getElementById('welcome').innerHTML = 'DetectRTC v' + DetectRTC.version;
480+
}
445481
</script>
446482

447483
<section class="experiment">

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949
"grunt-contrib-jshint": "0.11.3",
5050
"grunt-contrib-uglify": "0.11.0",
5151
"grunt-jsbeautifier": "0.2.10",
52+
"grunt-replace": "0.11.0",
53+
"grunt-contrib-clean": "0.6.0",
5254
"grunt-bump": "0.7.0"
5355
}
5456
}

test/browserstack.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ exports.config = {
99
multiCapabilities: []
1010
};
1111

12-
['Chrome'/*, 'Firefox'*/].forEach(function(browserName) {
12+
['Chrome' /*, 'Firefox'*/ ].forEach(function(browserName) {
1313
var browserInfo = getDefaultBrowserInfo(browserName);
1414

1515
[ /*'OS X',*/ 'Windows'].forEach(function(os) {

0 commit comments

Comments
 (0)