Как мне обработать перенаправления входа в систему с JQuery и YQL для кросс-доменных запросов, где ответ включает <body onload = "redirect ()" /> - PullRequest
0 голосов
/ 28 июля 2011

Итак, я настраиваю отдельную тестовую страницу, которая использует jquery и yql для выполнения междоменных запросов.Таким образом, моя справочная служба может открыть страницу, и она будет загружать несколько страниц из разных доменов.проблема в том, что json, который я получаю, содержит: "", который НЕ является содержимым страницы, которую я хочу ... Есть мысли о том, как решить эту проблему?

Моя ссылка в этом случае: http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/

Я могу заставить его пример работать без проблем ... только перенаправление в моем собственном случае.Да. Я использую google.load ('jquery', 1) и jqueryui, чтобы сохранить эту страницу в одиночестве.

Мысли?

Кстати, это для проверки моего приложения ипортал в 2 шт.Не говорите мне, чтобы разместить страницу.если мой сервер не работает, страница не будет там .. да, я знаю, что справочная служба ДОЛЖНА быть в состоянии справиться с этим ... но я все еще получаю тексты для нашего средства управления веб-контентом, а не мое приложение, потому что они, очевидно, не могут понять этоиз ... Я делаю эту пустышку для самостоятельной проверки.

КОД ДЛЯ СТРАНИЦЫ


<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Test</title>
<script
    src="https://www.google.com/jsapi?key=HIDDEN"
    type="text/javascript"></script>
<script>
    google.load("jquery", "1");
    google.load("jqueryui", "1");

    function checkJquery() {
        if (window.jQuery && jQuery.ui) {
            jqueryLoaded();
        } else {
            window.setTimeout(checkJquery, 100);
        }
    }

    function jqueryLoaded() {
        $(document).ready(function(){
            var container = $('#target');
            container.attr('tabIndex','-1');
            $('.ajaxtrigger').click(function(){
                var trigger = $(this);
                var url = trigger.attr('href');
                if(!trigger.hasClass('loaded')){
                    trigger.append('<span></span>');
                    trigger.addClass('loaded');
                    var msg = trigger.find('span::last');
                } else {
                    var msg = trigger.find('span::last');
                }
                doAjax(url,msg,container);
                return false;
            });

            function doAjax(url,msg,container){
                // if the URL starts with http
                if(url.match('^http')){
                  // assemble the YQL call
                  msg.removeClass('error');
                  msg.html(' (loading...)');
                  $.getJSON("http://query.yahooapis.com/v1/public/yql?"+
                            "q=select%20*%20from%20html%20where%20url%3D%22"+
                            encodeURIComponent(url)+
                            "%22&format=xml'&callback=?",
                            function(data){
                              if(data.results[0]){
                                var data = filterData(data.results[0]);
                                msg.html(' (ready.)');
                                container.
                                html(data).
                                focus().
                                effect("highlight",{},1000);
                              } else {
                                msg.html(' (error!)');
                                msg.addClass('error');
                                var errormsg = '<p>Error: could not load the page.</p>';
                                container.
                                html(errormsg).
                                focus().
                                effect('highlight',{color:'#c00'},1000);
                              }
                            }
                          );
                } else {
                  $.ajax({
                    url: url,
                    timeout:5000,
                    success: function(data){
                      msg.html(' (ready.)');
                      container.
                        html(data).
                          focus().
                            effect("highlight",{},1000);
                    },
                    error: function(req,error){
                      msg.html(' (error!)');
                      msg.addClass('error');
                      if(error === 'error'){error = req.statusText;}
                      var errormsg = 'There was a communication error: '+error;
                        container.
                          html(errormsg).
                            focus().
                              effect('highlight',{color:'#c00'},1000);
                    },
                    beforeSend: function(data){
                      msg.removeClass('error');
                      msg.html(' (loading...)');
                    }
                  });
                }
              }
              function filterData(data){
                // filter all the nasties out
                // no body tags
                data = data.replace(/<?\/body[^>]*>/g,'');
                // no linebreaks
                data = data.replace(/[\r|\n]+/g,'');
                // no comments
                data = data.replace(/<--[\S\s]*?-->/g,'');
                // no noscript blocks
                data = data.replace(/<noscript[^>]*>[\S\s]*?<\/noscript>/g,'');
                // no script blocks
                data = data.replace(/<script[^>]*>[\S\s]*?<\/script>/g,'');
                // no self closing scripts
                data = data.replace(/<script.*\/>/,'');
                // [... add as needed ...]
                return data;
              }
            });
    }

checkJquery();

</script>
</head>

<body>
    <ul> 
      <li><a href="http://developer.yaho.com" class="ajaxtrigger">see developer.yahoo.com</a></li> 
      <li><a href="http://tmiweb.cat.com" class="ajaxtrigger">TMIWeb WCM</a></li>
      <li><a href="borked" class="ajaxtrigger">this is a broken link</a></li> 
      <li><a href="http://borked" class="ajaxtrigger">this is an external broken link</a></li> 
      <li><a href="waiting-for-godot.php" class="ajaxtrigger">this times out</a></li>
    </ul> 
    <div id="target"><body/></div> 
</body>
</html>

Итак, ответ json, который я получаю, выглядит как страница нашего входаredirect

Я хочу заставить пользователя входить в систему с собственного экрана со своими учетными данными, чтобы мне не приходилось передавать cookie-файлы через API Yahoo или что-либо еще, когда Yahoo отправляет запрос на мою страницу.

edit Я также изменил код, чтобы попытаться загрузить фрейм с содержимым тела, думая, что он будет обрабатывать перенаправление ... но я получаю такой же стиль ответа ... и чтоВ итоге я вижу, что Iframe выглядит следующим образом:

<iframe style="width:80%; height:50%;" id="render">
     <html>
          <head>
          </head>
          <body style=""></body>
     </html>
</iframe>

Принимая во внимание, что пример, который я МОГУ заставить работать по ссылке james.padolsey, фактически заполняет содержимое тела моего iframe ... так что опятьЭлектронная переадресация.

...