Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Получить страницу с помощью WebWorker (https://javascript.ru/forum/misc/51017-poluchit-stranicu-s-pomoshhyu-webworker.html)

_Alex9_ 21.10.2014 09:13

Получить страницу с помощью WebWorker
 
Мой код выдаёт ошибку безопасности, поэтому хочу услышать от вас варианты как мне реализовать предзагрузку страниц в фоновом режиме на сайте.
Мой код:
на странице сайта example.com
<area shape='rect' coords='84,84,293,111' onclick='go()'>"


главный поток

var pages = {};
var loader = new Worker("http://sub1.example.com/w_p.js");
loader.onmessage = function (e) {
    pages = e.data;
}
function go()
{    
    doc.getElementById(contentContainer).innerHTML = pages[0];
}

воркер

var xhr = new XMLHttpRequest();
xhr.open("GET", "http://sub2.example.com/", false);
xhr.send();
var pages = {};
pages[0] = xhr.responseText;
postMessage(pages);


Выдаёт ошибку:
SecurityError: The operation is insecure.

var loader = new Worker("http://sub1.example.com/w_p.js");

Aetae 21.10.2014 10:58

Использовать асинхронный запрос:blink: ??
xmlhttp.open('GET', 'http://sub2.example.com/', *!*true*/!*);
xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4) {
     if(xmlhttp.status == 200) {
       alert(xmlhttp.responseText);
         }
  }
};
xmlhttp.send(null);

_Alex9_ 29.10.2014 10:55

Всё равно пишет SecurityError: The operation is insecure.

danik.js 29.10.2014 17:06

А какой смысл делать это в воркере?

_Alex9_ 01.11.2014 16:39

Чтобы не дергать основной поток загрузкой других страниц. Когда помещаю скрипт воркера на сайт, с которого его запрашиваю, то всё работает. Но мне желательно, чтобы воркер, как и основной скрипт, располагался на cdn.

Aetae 01.11.2014 16:46

_Alex9_,
Цитата:

Использовать асинхронный запрос
...без воркера.

_Alex9_ 02.11.2014 08:05

Благодарю. А с воркером так точно нельзя? Mozilla ни одной лазейки не оставила?

Erolast 02.11.2014 08:09

Зачем? Это всегда асинхронным запросом делается.

kostyanet 02.11.2014 20:07

Рабочий должен спать, тогда в нем есть смысл (иначе без него заснет браузер), а тут нет смысла.

Octane 03.11.2014 01:14

Цитата:

Сообщение от _Alex9_
А с воркером так точно нельзя? Mozilla ни одной лазейки не оставила?

https://developer.mozilla.org/en-US/..._API_reference
Цитата:

Сообщение от MDN
A Service Worker inherits all the limitations and behaviors available to HTML5 Shared Workers. It can create XMLHttpRequests, use WebSockets, receive messages from windows and the browser, use IndexedDB, and post messages to other windows.


Aetae 03.11.2014 01:21

Octane, тут важно другое:
https://developer.mozilla.org/en-US/...ng_web_workers
Цитата:

Note: The URI passed as parameter of the Worker constructor must obey the same-origin policy.

Octane 03.11.2014 21:45

Судя по примеру, предзагрузка нужна для субдоменов, Access-Control-Allow-Origin скорее всего можно поставить.

Aetae 04.11.2014 08:13

Octane, не, он хочет на cdn хранить скрипты, так что ничего не выйдет.)
Хотя вот есть извращения с iframe: http://stackoverflow.com/questions/2...fferent-origin .=)

_Alex9_ 09.11.2014 09:45

Сделал загрузку с помощью XmlHttpRequest, добавил заголовок Access-Control-Allow-Origin *, но всё равно не дает загрузить и предлагает включить CORS.

danik.js 09.11.2014 10:17

Цитата:

Сообщение от _Alex9_
добавил заголовок

Как? Покажи код.

_Alex9_ 09.11.2014 16:31

HttpContext.Response.AppendHeader("Access-Control-Allow-Origin", "*");
HttpContext.Response.AppendHeader("Access-Control-Allow-Credentials", "true");
HttpContext.Response.AppendHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS");
HttpContext.Response.AppendHeader("Access-Control-Allow-Headers", "origin, content-type, accept, x-requested-with, sid, mycustom, smuser,x-powered-by,cache-control,content-encoding,content-length,date,expires,pragma,server,vary,x-aspnet-version,x-aspnetmvc-version,accept-encoding,accept-language,dnt,host,origin,referer,user-agent");


Часовой пояс GMT +3, время: 16:37.