Skip to content

Commit c4c2d8f

Browse files
committed
fix for Opera "You cannot create new tabs while in locked fullscreen mode" when trying to create player tab from event page
1 parent 2026b72 commit c4c2d8f

7 files changed

Lines changed: 60 additions & 5 deletions

File tree

js/defaults.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ var config = {
2929
permissions: ["webRequest"],
3030
origins: ["https://*/"]
3131
},
32+
browserId: getBrowser(),
3233
}
3334

3435
var defaults = {
@@ -571,7 +572,7 @@ function getBrowser() {
571572
}
572573

573574
function getHotkeySettingsUrl() {
574-
switch (getBrowser()) {
575+
switch (config.browserId) {
575576
case 'opera': return 'opera://settings/configureCommands';
576577
case 'chrome': return 'chrome://extensions/configureCommands';
577578
default: return brapi.runtime.getURL("shortcuts.html");

js/events.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ brapi.runtime.onInstalled.addListener(function() {
33
installContentScripts()
44
installContextMenus()
55
})
6-
if (getBrowser() == "firefox") brapi.runtime.onStartup.addListener(installContextMenus);
76

87

98
/**

js/options.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22
(function() {
33
const queryString = getQueryString()
44
const domReadyPromise = domReady()
5+
const playerCheckIn$ = new rxjs.Subject()
6+
7+
registerMessageListener("options", {
8+
playerCheckIn() {
9+
playerCheckIn$.next()
10+
}
11+
})
512

613

714
//i18n
@@ -425,6 +432,23 @@
425432
}
426433
})
427434
}
435+
else if (config.browserId == "opera" && /locked fullscreen/.test(err.message)) {
436+
$("#status").html("Click <a href='#open-player-tab'>here</a> to start read aloud.").parent().show()
437+
$("#status a").click(async function() {
438+
try {
439+
playerCheckIn$.pipe(rxjs.take(1)).subscribe(() => $("#test-voice").click())
440+
const tab = await brapi.tabs.create({
441+
url: "player.html?opener=options&autoclose=long",
442+
index: 0,
443+
active: false,
444+
})
445+
brapi.tabs.update(tab.id, {pinned: true})
446+
.catch(console.error)
447+
} catch (err) {
448+
handleError(err)
449+
}
450+
})
451+
}
428452
else {
429453
$("#status").text(err.message).parent().show();
430454
}

js/player.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ if (queryString.has("autoclose"))
101101
rxjs.combineLatest(idleSubject, piperSubject.pipe(rxjs.startWith(null)))
102102
.pipe(
103103
rxjs.switchMap(([isIdle, piper]) => {
104-
if (isIdle) return rxjs.timer(piper ? 15*60*1000 : 5*60*1000)
104+
if (isIdle) return rxjs.timer(queryString.get("autoclose") == "long" || piper ? 15*60*1000 : 5*60*1000)
105105
else return rxjs.EMPTY
106106
})
107107
)
@@ -129,8 +129,13 @@ var messageHandlers = {
129129

130130
registerMessageListener("player", messageHandlers)
131131

132-
bgPageInvoke("playerCheckIn")
133-
.catch(console.error)
132+
if (queryString.has("opener")) {
133+
brapi.runtime.sendMessage({dest: queryString.get("opener"), method: "playerCheckIn"})
134+
.catch(console.error)
135+
} else {
136+
bgPageInvoke("playerCheckIn")
137+
.catch(console.error)
138+
}
134139

135140
document.addEventListener("DOMContentLoaded", initialize)
136141

js/popup.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11

22
var queryString = getQueryString()
3+
const playerCheckIn$ = new rxjs.Subject()
4+
5+
registerMessageListener("popup", {
6+
playerCheckIn() {
7+
playerCheckIn$.next()
8+
}
9+
})
310

411
const piperInitializingSubject = new rxjs.Subject()
512
piperInitializingSubject
@@ -117,6 +124,23 @@ function handleError(err) {
117124
}
118125
})
119126
}
127+
else if (config.browserId == "opera" && /locked fullscreen/.test(err.message)) {
128+
$("#status").html("Click <a href='#open-player-tab'>here</a> to start read aloud.").show()
129+
$("#status a").click(async function() {
130+
try {
131+
playerCheckIn$.pipe(rxjs.take(1)).subscribe(() => $("#btnPlay").click())
132+
const tab = await brapi.tabs.create({
133+
url: "player.html?opener=popup&autoclose=long",
134+
index: 0,
135+
active: false,
136+
})
137+
brapi.tabs.update(tab.id, {pinned: true})
138+
.catch(console.error)
139+
} catch (err) {
140+
handleError(err)
141+
}
142+
})
143+
}
120144
else {
121145
$("#status").text(err.message).show();
122146
}

options.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
<script src="js/jquery-3.7.1.min.js"></script>
1212
<script src="js/aws-sdk.js"></script>
1313
<script src="js/defaults.js"></script>
14+
<script src="js/messaging.js"></script>
1415
<script src="js/tts-engines.js"></script>
1516
<script src="js/options.js"></script>
1617
</head>

popup.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<script src="js/rxjs.umd.min.js"></script>
1313
<script src="js/jquery-3.7.1.min.js"></script>
1414
<script src="js/defaults.js"></script>
15+
<script src="js/messaging.js"></script>
1516
<script src="js/popup.js"></script>
1617
</head>
1718
<body>

0 commit comments

Comments
 (0)