FF bug workaround: apply styles to more iframes
This commit is contained in:
parent
92d6530c8f
commit
406a7cd4c0
|
@ -56,6 +56,32 @@ var browserCommands, contextMenus;
|
||||||
// register all listeners
|
// register all listeners
|
||||||
chrome.runtime.onMessage.addListener(onRuntimeMessage);
|
chrome.runtime.onMessage.addListener(onRuntimeMessage);
|
||||||
|
|
||||||
|
if (FIREFOX) {
|
||||||
|
// see notes in apply.js for getStylesFallback
|
||||||
|
const MSG_GET_STYLES = 'getStyles:';
|
||||||
|
const MSG_GET_STYLES_LEN = MSG_GET_STYLES.length;
|
||||||
|
chrome.runtime.onConnect.addListener(port => {
|
||||||
|
if (!port.name.startsWith(MSG_GET_STYLES)) return;
|
||||||
|
const tabId = port.sender.tab.id;
|
||||||
|
const frameId = port.sender.frameId;
|
||||||
|
const options = tryJSONparse(port.name.slice(MSG_GET_STYLES_LEN));
|
||||||
|
port.disconnect();
|
||||||
|
getStyles(options).then(styles => {
|
||||||
|
if (!styles.length) return;
|
||||||
|
chrome.tabs.executeScript(tabId, {
|
||||||
|
code: `
|
||||||
|
applyOnMessage({
|
||||||
|
method: 'styleApply',
|
||||||
|
styles: ${JSON.stringify(styles)},
|
||||||
|
})
|
||||||
|
`,
|
||||||
|
runAt: 'document_start',
|
||||||
|
frameId,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const listener =
|
const listener =
|
||||||
URLS.chromeProtectsNTP
|
URLS.chromeProtectsNTP
|
||||||
|
|
|
@ -50,11 +50,35 @@
|
||||||
// On own pages we request the styles directly to minimize delay and flicker
|
// On own pages we request the styles directly to minimize delay and flicker
|
||||||
if (typeof API === 'function') {
|
if (typeof API === 'function') {
|
||||||
API.getStyles(request).then(callback);
|
API.getStyles(request).then(callback);
|
||||||
|
} else if (!CHROME && getStylesFallback(request)) {
|
||||||
|
// NOP
|
||||||
} else {
|
} else {
|
||||||
chrome.runtime.sendMessage(request, callback);
|
chrome.runtime.sendMessage(request, callback);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: remove when FF fixes the bug.
|
||||||
|
* Firefox borks sendMessage in same-origin iframes that have 'src' with a real path on the site.
|
||||||
|
* We implement a workaround for the initial styleApply case only.
|
||||||
|
* Everything else (like toggling of styles) is still buggy.
|
||||||
|
* @param {Object} msg
|
||||||
|
* @param {Function} callback
|
||||||
|
* @returns {Boolean|undefined}
|
||||||
|
*/
|
||||||
|
function getStylesFallback(msg) {
|
||||||
|
if (window !== parent &&
|
||||||
|
location.href !== 'about:blank') {
|
||||||
|
try {
|
||||||
|
if (parent.location.origin === location.origin &&
|
||||||
|
parent.location.href !== location.href) {
|
||||||
|
chrome.runtime.connect({name: 'getStyles:' + JSON.stringify(msg)});
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} catch (e) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function applyOnMessage(request, sender, sendResponse) {
|
function applyOnMessage(request, sender, sendResponse) {
|
||||||
if (request.styles === 'DIY') {
|
if (request.styles === 'DIY') {
|
||||||
// Do-It-Yourself tells our built-in pages to fetch the styles directly
|
// Do-It-Yourself tells our built-in pages to fetch the styles directly
|
||||||
|
|
Loading…
Reference in New Issue
Block a user