Допускайте все события в списке внутри перечислимого выражения [duplicate]

Вы можете обойти X-Frame-Options в & lt; iframe & gt; с помощью YQL. Вот доказательство концепции, протестированной в Chrome & amp; Firefox: Hacker News в & lt; iframe & gt; .

Процесс выглядит следующим образом:

  1. Запросить URL-адрес iframe из YQL (функция loadURL ),
  2. Получить данные HTML из YQL (функция getData ),
  3. Добавить ссылку & lt; base link & gt; , и & lt; script & gt; в iframe, используя YQL,
  4. Внесите этот HTML в пустой & lt; iframe & gt; (функция loadHTML ).

Пример кода JS:

  var iframe = document.getElementsByTagName ('iframe'  ) [0];  var url = iframe.src;  var getData = function (data) {if (data & amp; & amp; data.query & amp; & amp; data.query.results & amp; data.query.results.resources & amp; data.query.results.resources.  content & amp; & amp; data.query.results.resources.status == 200) loadHTML (data.query.results.resources.content);  else if (data & amp; & amp; data.error & amp; & amp; data.error.description) loadHTML (data.error.description);  else loadHTML ('Ошибка: Не могу загрузить' + url);  };  var loadURL = function (src) {url = src;  var script = document.createElement ('script');  script.src = 'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20data.headers%20where%20url%3D%22' + encodeURIComponent (url) + '%  22 & амп; формат = & JSON амп; диагностика = истина & амп; ENV = магазин% 3A% 2F% 2Fdatatables.org% 2Falltableswithkeys & амп; обратный вызов = GetData ';  document.body.appendChild (сценарий);  };  var loadHTML = function (html) {iframe.src = 'about: blank';  iframe.contentWindow.document.open ();  iframe.contentWindow.document.write (html.replace (/ & lt; head & gt; / i, '& lt; head & gt; & lt; base href = "' + url + '" & gt; & lt; scr' + 'ipt & gt; document.addEventListener  («click», function (e) {if (e.target & amp; e.target.nodeName == "A") {e.preventDefault (); parent.loadURL (e.target.href);}}  ); & lt; / scr '+' ipt & gt; '));  iframe.contentWindow.document.close ();  } loadURL (iframe.src);   

5
задан rheone 15 November 2012 в 19:47
поделиться

2 ответа

Нет, это не так.

Это функция, которая была запрошена, и это неплохая идея (существует yield foreach или эквивалент на других языках).

На данный момент Microsoft просто не выделила времени и денег для ее реализации. Они могут или не могут реализовать его в будущем; Я бы предположил (без фактической основы), что это где-то в списке дел; это просто вопрос о том, действительно ли / когда он становится достаточно высоким в этом списке.

Единственное возможное изменение, которое я мог видеть, - это реорганизовать все отдельные yield returns сверху метода в свой собственный метод перечислимого возврата, а затем добавить новый метод, который возвращает конкатенацию этого метода и methodReturningEnumerable(x,y,z). Было бы лучше; нет, вероятно нет. Concat добавит обратно столько же, сколько вы бы сохранили, если не больше.

5
ответ дан Servy 16 August 2018 в 01:38
поделиться
  • 1
    Я отмечаю это как принятый ответ не потому, что он дает мне ответ, который я искал, а потому, что он достаточно хорошо объясняет, почему ответ, который я ищу, пока не существует. – rheone 16 November 2012 в 19:22

Не может быть сделано. Это не так уж плохо. Вы можете сократить его до одной строки:

foreach (var o in otherEnumerator) yield return o;

Несвязанное примечание: вы должны быть осторожны с тем, какую логику вы включаете в свои генераторы; все выполнение отложено до тех пор, пока GetEnumerator() не будет вызван на возвращенный IEnumerable. Я поймал, что я неправильно выбрасываю NullArgumentException таким образом, что я думал, что это стоит упомянуть. :)

2
ответ дан Siege 16 August 2018 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: