| 1 |
wakaba |
1.1 |
<!DOCTYPE HTML> |
| 2 |
|
|
<html lang=en> |
| 3 |
|
|
<title>Mini browser</title> |
| 4 |
|
|
<link rel=stylesheet href="/www/style/html/xhtml"> |
| 5 |
|
|
<style> |
| 6 |
|
|
.sami-browser-iframe { |
| 7 |
|
|
width: 100%; |
| 8 |
|
|
height: 20em; |
| 9 |
|
|
} |
| 10 |
wakaba |
1.2 |
|
| 11 |
|
|
.sami-browser-xhr { |
| 12 |
|
|
position: relative; |
| 13 |
|
|
display: block; |
| 14 |
|
|
border: outset thin; |
| 15 |
|
|
overflow: auto; |
| 16 |
|
|
} |
| 17 |
wakaba |
1.3 |
|
| 18 |
|
|
output { |
| 19 |
|
|
display: block; |
| 20 |
|
|
} |
| 21 |
|
|
|
| 22 |
|
|
[hidden] { |
| 23 |
|
|
display: none; |
| 24 |
|
|
} |
| 25 |
wakaba |
1.1 |
</style> |
| 26 |
|
|
|
| 27 |
|
|
<h1>Mini browser</h1> |
| 28 |
|
|
|
| 29 |
|
|
<section id=browser> |
| 30 |
|
|
|
| 31 |
|
|
<input id=browser-url type=url> |
| 32 |
|
|
|
| 33 |
|
|
<div id=browser-viewport></div> |
| 34 |
|
|
|
| 35 |
wakaba |
1.3 |
<output id=browser-status></output> |
| 36 |
|
|
<output id=browser-progress></output> |
| 37 |
|
|
|
| 38 |
wakaba |
1.1 |
</section> |
| 39 |
|
|
|
| 40 |
|
|
<script> |
| 41 |
|
|
var SAMI = {}; |
| 42 |
|
|
SAMI.onLoadFunctions = []; |
| 43 |
|
|
SAMI.onLoadFunctions.push (function () { |
| 44 |
|
|
SAMI.Script.loadScripts (new SAMI.List ([ |
| 45 |
|
|
'../script/sami-browser.js' |
| 46 |
|
|
]), function () { |
| 47 |
|
|
var bplaceholder = document.getElementById ('browser-viewport'); |
| 48 |
|
|
var browserURL = document.getElementById ('browser-url'); |
| 49 |
wakaba |
1.3 |
var browserStatus = document.getElementById ('browser-status'); |
| 50 |
|
|
var browserProgress = document.getElementById ('browser-progress'); |
| 51 |
wakaba |
1.1 |
|
| 52 |
wakaba |
1.2 |
var browser = new SAMI.Browser.XHR (bplaceholder); |
| 53 |
wakaba |
1.1 |
|
| 54 |
wakaba |
1.3 |
new SAMI.Observer (browser, 'urlchanged', function (ev) { |
| 55 |
wakaba |
1.1 |
browserURL.value = ev.target.getURL (); |
| 56 |
wakaba |
1.3 |
var res = ev.target.contentWindow.location.samiResponse; |
| 57 |
|
|
var status = res.statusCode + ' ' + res.statusText; |
| 58 |
|
|
SAMI.Element.setTextContent (browserStatus, status); |
| 59 |
|
|
}); |
| 60 |
|
|
|
| 61 |
|
|
new SAMI.Observer (browser, 'readystatechange', function (ev) { |
| 62 |
|
|
var rs = ev.target.readyState; |
| 63 |
|
|
if (rs == 'sami-startload') { |
| 64 |
|
|
SAMI.Element.setTextContent (browserProgress, 'Loading...'); |
| 65 |
|
|
} else { |
| 66 |
|
|
SAMI.Element.setTextContent (browserProgress, 'Document: Done'); |
| 67 |
|
|
} |
| 68 |
wakaba |
1.1 |
}); |
| 69 |
|
|
|
| 70 |
wakaba |
1.2 |
browser.openURL ('http://suika.fam.cx/antenna.ja.html'); |
| 71 |
|
|
|
| 72 |
|
|
new SAMI.Observer (browserURL, 'change', function (ev) { |
| 73 |
|
|
bev = new SAMI.Event.Browser (ev); |
| 74 |
|
|
browser.openURL (bev.target.value); |
| 75 |
|
|
}); |
| 76 |
wakaba |
1.1 |
}); |
| 77 |
|
|
}); |
| 78 |
|
|
</script> |
| 79 |
|
|
<script src="../script/sami-core.js" defer async></script> |