Skip to content

Commit bc491bc

Browse files
committed
automatically set playsinline on videos in a-assets (fixes #1906)
1 parent 17caa8e commit bc491bc

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

‎src/core/a-assets.js‎

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ module.exports = registerElement('a-assets', {
3838
// Wait for <img>s.
3939
imgEls = this.querySelectorAll('img');
4040
for (i = 0; i < imgEls.length; i++) {
41-
imgEl = setCrossOrigin(imgEls[i]);
41+
imgEl = fixUpMediaElement(imgEls[i]);
4242
loaded.push(new Promise(function (resolve, reject) {
4343
imgEl.onload = resolve;
4444
imgEl.onerror = reject;
@@ -48,7 +48,7 @@ module.exports = registerElement('a-assets', {
4848
// Wait for <audio>s and <video>s.
4949
mediaEls = this.querySelectorAll('audio, video');
5050
for (i = 0; i < mediaEls.length; i++) {
51-
mediaEl = setCrossOrigin(mediaEls[i]);
51+
mediaEl = fixUpMediaElement(mediaEls[i]);
5252
loaded.push(mediaElementLoaded(mediaEl));
5353
}
5454

@@ -159,6 +159,27 @@ function mediaElementLoaded (el) {
159159
});
160160
}
161161

162+
/**
163+
* Automatically add attributes to media elements where convenient.
164+
* crossorigin, playsinline.
165+
*/
166+
function fixUpMediaElement (mediaEl) {
167+
// Cross-origin.
168+
var newMediaEl = setCrossOrigin(mediaEl);
169+
170+
// Plays inline for mobile.
171+
if (newMediaEl.tagName === 'VIDEO') {
172+
newMediaEl.setAttribute('playsinline');
173+
newMediaEl.setAttribute('webkit-playsinline');
174+
}
175+
176+
if (newMediaEl !== mediaEl) {
177+
mediaEl.parentNode.appendChild(newMediaEl);
178+
mediaEl.parentNode.removeChild(mediaEl);
179+
}
180+
return newMediaEl;
181+
}
182+
162183
/**
163184
* Automatically set `crossorigin` if not defined on the media element.
164185
* If it is not defined, we must create and re-append a new media element <img> and
@@ -188,8 +209,6 @@ function setCrossOrigin (mediaEl) {
188209
'A-Frame will re-request the asset with `crossorigin` attribute set.', src);
189210
mediaEl.crossOrigin = 'anonymous';
190211
newMediaEl = mediaEl.cloneNode(true);
191-
mediaEl.parentNode.appendChild(newMediaEl);
192-
mediaEl.parentNode.removeChild(mediaEl);
193212
return newMediaEl;
194213
}
195214

0 commit comments

Comments
 (0)