WebExtension as alternative to Chromecast
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

88 lines
2.4 KiB

console.log("muffcast client v0.1");
var muffcastUrl = "http://localhost:8128";
browser.storage.local.get("muffcast").then(function(result) {
muffcastUrl = result.muffcast && result.muffcast.url || muffcastUrl;
})
var sendServer = function(message) {
return new Promise(function(resolve, reject) {
var xhttp = new XMLHttpRequest();
xhttp.open("POST", muffcastUrl, true);
xhttp.addEventListener("load", function() {
if (this.readyState == 4) {
if (this.status == 200) {
var response = this.responseText ? JSON.parse(this.responseText) : false;
resolve(response);
} else {
reject({
status: this.status,
error: this.statusText,
body: this.responseText
});
}
}
});
xhttp.setRequestHeader("content-type", "application/json");
xhttp.send(JSON.stringify(message));
})
}
var clientUpdate = function() {
browser.tabs.query({
currentWindow: true,
active: true
}).then(function(tabs) {
var tab = tabs[0];
browser.tabs.sendMessage(
tab.id, {
command: "update"
}
);
});
}
var injectCss = function(tabId) {
browser.tabs.insertCSS(tabId, {
code: "@font-face { font-family: 'FontAwesome';" +
"src: url('" + browser.extension.getURL("fonts/fontawesome.eot") + "?v=4.7.0');" +
"src: url('" + browser.extension.getURL("fonts/fontawesome.eot") + "?#iefix&v=4.7.0') format('embedded-opentype')," +
"url('" + browser.extension.getURL("fonts/fontawesome.woff2") + "?v=4.7.0') format('woff2')," +
"url('" + browser.extension.getURL("fonts/fontawesome.woff") + "?v=4.7.0') format('woff')," +
"url('" + browser.extension.getURL("fonts/fontawesome.ttf") + "?v=4.7.0') format('truetype')," +
"url('" + browser.extension.getURL("fonts/fontawesome.svg") + "?v=4.7.0#fontawesomeregular') format('svg');" +
"font - weight: normal;" +
"font - style: normal;}"
});
browser.tabs.insertCSS(tabId, {
file: "css/font-awesome.css"
});
browser.tabs.insertCSS(tabId, {
file: "css/overlay.css"
});
}
browser.tabs.onActivated.addListener(function(tab) {
injectCss(tab.id);
clientUpdate();
});
browser.tabs.onUpdated.addListener(function(tabId, changeInfo) {
injectCss(tabId);
if (changeInfo.status === "complete") {
clientUpdate();
}
});
browser.runtime.onMessage.addListener(function(message) {
console.log("send", message);
sendServer(message).then(function(response) {
console.log("response", response);
if (message.command == "load") {
clientUpdate();
}
})
})