<meta charset="utf-8">
<meta http-equiv="Content-Security-Policy" value="trusted-types *">
<script src="https://rawgit.com/WICG/trusted-types/master/dist/es6/trustedtypes.build.js"></script>
<pre id="foo">
</pre>
<script>
let testCase = 0;
async function test(name, f) {
try {
const r = await f(++testCase);
const msg = name + ' allowed: ' + r;
console.log(msg);
foo.innerText += msg + '\n';
} catch(e) {
const msg = name + ' blocked';
console.log(msg);
foo.innerText += msg + '\n';
console.error(e);
}
}
test('createHTMLDocument', (n) => {
const d = document.implementation.createHTMLDocument('title');
d.body.innerHTML = '<foo>'+n;
return d.body.innerHTML;
});
test('DOMParser', (n) => {
return new DOMParser().parseFromString('<foo>'+n, 'text/html').body.innerHTML;
});
test('DOMParser, manual modification', (n) => {
const d = DOMParser().parseFromString('<foo>', 'text/html');
d.body.innerHTML = n;
return d.body.innerHTML;
});
function xhrGet(url, responseType="") {
return new Promise(
function (resolve, reject) {
const request = new XMLHttpRequest();
request.onload = function () {
if (this.status === 200) {
// Success
resolve(this.response);
} else {
// Something went wrong (404 etc.)
reject(new Error(this.statusText));
}
};
request.onerror = function () {
reject(new Error(
'XMLHttpRequest Error: '+this.statusText));
};
request.open('GET', url);
request.responseType = responseType;
request.send();
});
}
test('xhr', async (n) => {
const d = await xhrGet("data:text/html,<foo>"+n, "document");
return d.body.innerHTML;
});
test('xhr, manual modification', async (n) => {
const d = await xhrGet("data:text/html,<foo>"+n, "document");
d.body.innerHTML = n;
return d.body.innerHTML;
});
</script>
Output
You can jump to the latest bin by adding /latest
to your URL
Keyboard Shortcuts
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + ] | Indents selected lines |
ctrl + [ | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + shift + L | Beautify code in active panel |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Open the share options |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
JS Bin URLs
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |