Простой wap браузер на JavaScript
- <div id="url-bar">
- <input id="url" type="text" placeholder="Enter url" value="">
- <button onclick="goToUrl()">Go</button>
- </div>
- <div id="preview"></div>
- body {
- font-family: Helvetica, Arial, sans-serif;
- color: #2c3e50;
- }
- #url-bar {
- display: flex;
- justify-content: center;
- margin: 0;
- padding: 0.6em 0;
- border-bottom: 1px dashed #4fc08d;
- }
- #url-bar input,
- #url-bar button {
- background: none;
- color: #4fc08d;
- border: solid 1px;
- border-radius: 2em;
- font: inherit;
- padding: 0.45em 1.5em;
- margin: 0 0.2em;
- }
- #preview {
- max-width: 480px;
- margin: 0 auto;
- }
- function setUrl(url) {
- window.url.value = url;
- goToUrl();
- }
- function goToUrl() {
- let currentUrl = window.url.value.replace("http://", "").replace("https://", "");
- if (currentUrl.endsWith("/")) currentUrl = currentUrl.slice(0, -1);
- const baseUrl = urlToBaseUrl(currentUrl);
- const parser = new DOMParser();
- fetch("https://cors-anywhere.herokuapp.com/" + currentUrl, {
- headers: {
- 'Content-Type': 'text/xml'
- }
- })
- .then(r => r.text())
- .then(xml => {
- const doc = parser.parseFromString(xml, "text/xml");
- const card = doc.getElementsByTagName("card")[0];
- document.title = card.getAttribute("title");
- doc.querySelectorAll("img[src]")
- .forEach(el => {
- let url = el.getAttribute("src");
- url = resolveUrl(currentUrl, url);
- el.setAttribute("src", "http://" + url);
- });
- window.preview.innerHTML = card.innerHTML;
- document.querySelectorAll("#preview a[href]")
- .forEach(el => {
- el.onclick = (e) => {
- e.preventDefault();
- let url = el.getAttribute("href");
- url = resolveUrl(currentUrl, url);
- setUrl(url);
- };
- });
- })
- .catch(err => alert(err));
- }
- function urlToBaseUrl(url) {
- let idx = url.indexOf("/");
- return (idx > 0) ? url.substring(0, idx) : url;
- }
- function resolveUrl(currentUrl, url) {
- if (url.startsWith("/")) return urlToBaseUrl(currentUrl) + url;
- if (url.startsWith("./")) return currentUrl + url.substring(1);
- if (url.match(/https?:\/\/.*/) == null) return currentUrl + "/" + url;
- return url;
- }
Простой wap браузер, который посылает запрос на указанный адрес, парсит полученный ответ, переопределяет url в адресах ссылок и изображений, а затем выводит полученный результат.
Некоторые страницы не открываются, потому что стандартный XML-парсер считает ответ невалидным.
Демо (нажать на Go):
Некоторые страницы не открываются, потому что стандартный XML-парсер считает ответ невалидным.
Демо (нажать на Go):