mirror of
https://github.com/osnr/TabFS.git
synced 2024-06-11 10:22:15 +02:00
remove TAB/console and TAB/execute-script which are ugly
(and not really necessary now that we have evals, I think? like, as long as you have some way to run JS on the content script, you can build other functionality out of that)
This commit is contained in:
parent
ad80383242
commit
063051d80b
|
@ -246,87 +246,6 @@ router["/tabs/by-id"] = {
|
||||||
// being "truee" (if it was "false", then someone wrote "true")
|
// being "truee" (if it was "false", then someone wrote "true")
|
||||||
buf => ({ active: buf.startsWith("true") }));
|
buf => ({ active: buf.startsWith("true") }));
|
||||||
})();
|
})();
|
||||||
(function() {
|
|
||||||
let nextConsoleFh = 0; let consoleForFh = {};
|
|
||||||
chrome.runtime.onMessage.addListener(data => {
|
|
||||||
if (!consoleForFh[data.fh]) return;
|
|
||||||
consoleForFh[data.fh].push(data.xs);
|
|
||||||
});
|
|
||||||
router["/tabs/by-id/*/console"] = {
|
|
||||||
// this one is a bit weird. it doesn't start tracking until it's opened.
|
|
||||||
// tail -f console
|
|
||||||
async getattr() {
|
|
||||||
return {
|
|
||||||
st_mode: unix.S_IFREG | 0444,
|
|
||||||
st_nlink: 1,
|
|
||||||
st_size: 0 // FIXME
|
|
||||||
};
|
|
||||||
},
|
|
||||||
async open({path}) {
|
|
||||||
const tabId = parseInt(pathComponent(path, -2));
|
|
||||||
const fh = nextConsoleFh++;
|
|
||||||
const code = `
|
|
||||||
// runs in 'content script' context
|
|
||||||
var script = document.createElement('script');
|
|
||||||
var code = \`
|
|
||||||
// will run both here in content script context and in
|
|
||||||
// real Web page context (so we hook console.log for both)
|
|
||||||
(function() {
|
|
||||||
if (!console.__logOld) console.__logOld = console.log;
|
|
||||||
if (!console.__logFhs) console.__logFhs = new Set();
|
|
||||||
console.__logFhs.add(${fh});
|
|
||||||
console.log = (...xs) => {
|
|
||||||
console.__logOld(...xs);
|
|
||||||
try {
|
|
||||||
// TODO: use random event for security instead of this broadcast
|
|
||||||
for (let fh of console.__logFhs) {
|
|
||||||
window.postMessage({fh: ${fh}, xs: xs}, '*');
|
|
||||||
}
|
|
||||||
// error usually if one of xs is not serializable
|
|
||||||
} catch (e) { console.error(e); }
|
|
||||||
};
|
|
||||||
})()
|
|
||||||
\`;
|
|
||||||
eval(code);
|
|
||||||
script.appendChild(document.createTextNode(code));
|
|
||||||
(document.body || document.head).appendChild(script);
|
|
||||||
|
|
||||||
window.addEventListener('message', function({data}) {
|
|
||||||
if (data.fh !== ${fh}) return;
|
|
||||||
// forward to the background script
|
|
||||||
chrome.runtime.sendMessage(null, data);
|
|
||||||
});
|
|
||||||
`;
|
|
||||||
consoleForFh[fh] = [];
|
|
||||||
await browser.tabs.executeScript(tabId, {code});
|
|
||||||
return {fh};
|
|
||||||
},
|
|
||||||
async read({path, fh, offset, size}) {
|
|
||||||
const all = consoleForFh[fh].join('\n');
|
|
||||||
// TODO: do this more incrementally ?
|
|
||||||
// will probably break down if log is huge
|
|
||||||
const buf = String.fromCharCode(...toUtf8Array(all).slice(offset, offset + size));
|
|
||||||
return { buf };
|
|
||||||
},
|
|
||||||
async release({path, fh}) {
|
|
||||||
const tabId = parseInt(pathComponent(path, -2));
|
|
||||||
// TODO: clean up the hooks inside the contexts
|
|
||||||
delete consoleForFh[fh];
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
};
|
|
||||||
})();
|
|
||||||
router["/tabs/by-id/*/execute-script"] = {
|
|
||||||
// note: runs in a content script, _not_ in the Web page context
|
|
||||||
async write({path, buf}) {
|
|
||||||
// FIXME: chunk this properly (like if they write a script in
|
|
||||||
// multiple chunks) and only execute when ready?
|
|
||||||
const tabId = parseInt(pathComponent(path, -2));
|
|
||||||
await browser.tabs.executeScript(tabId, {code: buf});
|
|
||||||
return {size: stringToUtf8Array(buf).length};
|
|
||||||
},
|
|
||||||
async truncate({path, size}) { return {}; }
|
|
||||||
};
|
|
||||||
(function() {
|
(function() {
|
||||||
let evals = {};
|
let evals = {};
|
||||||
router["/tabs/by-id/*/evals"] = {
|
router["/tabs/by-id/*/evals"] = {
|
||||||
|
|
11
tabfs.md
11
tabfs.md
|
@ -165,11 +165,16 @@ could do in the first place)
|
||||||
$ cat mnt/tabs/by-id/*/text.txt > text-of-all-tabs.txt
|
$ cat mnt/tabs/by-id/*/text.txt > text-of-all-tabs.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
### Run script
|
### [Evaluate JavaScript on a page](https://twitter.com/rsnous/status/1364008241588363264)
|
||||||
|
|
||||||
```
|
```
|
||||||
$ echo 'document.body.style.background = "green"' > mnt/tabs/last-focused/execute-script
|
$ touch mnt/tabs/last-focused/evals/'document.body.style.background = "green"'
|
||||||
$ echo 'alert("hi!")' > mnt/tabs/last-focused/execute-script
|
|
||||||
|
$ touch mnt/tabs/last-focused/evals/'alert("hi!")'
|
||||||
|
|
||||||
|
$ touch mnt/tabs/last-focused/evals/'2 + 2'
|
||||||
|
$ cat mnt/tabs/last-focused/evals/'2 + 2'
|
||||||
|
4
|
||||||
```
|
```
|
||||||
|
|
||||||
### Get images / scripts / other resource files from page
|
### Get images / scripts / other resource files from page
|
||||||
|
|
Loading…
Reference in a new issue