получить изменяющийся URL-адрес с помощью javascript

у меня следующий вопрос:

В настоящее время я работаю с программным обеспечением (MicroStrategy, BI), которое имеет функцию экспорта отчетов в pdf, это работает примерно так:

каждый отчет имеет уникальный идентификатор, поэтому вы выбираете отчет для экспорта, и с помощью jsp я отправляю идентификатор этого отчета в инструмент экспорта, и он генерирует полный URL-адрес с некоторыми параметрами, которые сервер MicroStrategy считывает для создания PDF.

Я пытаюсь захватить этот URL-адрес PDF и отправить его методу Java, который сохранит этот PDF-файл на жестком диске, не запрашивая ничего у пользователя.

Моя проблема в том, что этот URL-адрес не генерируется мгновенно, это занимает некоторое время, И в процессе выполняются некоторые перенаправления.

Итак, после всей этой болтовни, как я могу захватить этот чертов URL?

Я делаю загрузку pdf в iframe, а затем извлекаю URL-адрес с помощью кода js, который я нашел при поиске, назначая его переменной JSP, а затем, как только у меня есть URL-адрес pdf, вызываю метод Java. Но это не работает.

Функция JavaScript такова:

<script language="text/javascript">
    function getSrc()
    {
        var CurrentUrl = document.getElementById('miframe').contentWindow.location.href;
        if(currentUrl.substr(length-5)==".pdf")
        {
           return currentUrl;
        }
        else
        {
           setTimeout(getSrc(),5000);
        }
    }
</script>

и это вызов, который я делаю для него:

<% jsp code
    String currentUrl="<script>document.writeln(getSrc();)</script>";
more jsp code %>

Остальная часть кода на самом деле в порядке, попробовал с обычным URL-адресом PDF и сохранил PDF на диск.

Надеюсь понятно и заранее спасибо!


person Pedrobotella    schedule 28.03.2012    source источник


Ответы (3)


Ваша основная проблема заключается в том, что вы вызываете getSrc, а не передаете ее setTimeout (на самом деле вы передаете null setTimeout, если только второй вызов getSrc не сработает, и в этом случае вы передаете строку, которую setTimeout не может обработать из-за к «синтаксическим ошибкам».

Вместо этого используйте setTimeout(getSrc,5000); — без скобок после getSrc. Это передает функцию, а не ее результат.

Кроме того, currentUrl.substr(length-5) неверно, отчасти потому, что length не определено (вам нужно currentUrl.length), а отчасти потому, что вам нужно -4, чтобы получить последние четыре символа.

person Niet the Dark Absol    schedule 28.03.2012
comment
Ничего себе, те ошибки, которые вы указываете, совершенно нубские. Не знаю, почему я не уделил больше внимания коду. D: Я думаю, что вызов getSrc(), на который вы ссылаетесь, относится к коду JSP. Или это тоже неправильно? Я думаю, что это не так, но я не совсем уверен - person Pedrobotella; 28.03.2012
comment
Вы были правы, добавили предупреждение(), и оно никогда не отображается. Как мне присвоить возвращаемое значение getSrc строке jsp? - person Pedrobotella; 28.03.2012
comment
Я понятия не имею, я никогда не использовал JSP. Я просто исправлял ваши ошибки JS: p - person Niet the Dark Absol; 28.03.2012
comment
Ой, грустное лицо =(. В любом случае, спасибо, я мог бы сделать все правильно, что это все равно не сработает! =) - person Pedrobotella; 28.03.2012

Я не знаю, какой у вас доступ к MicroStrategy, но есть API-интерфейс MicroStrategy java, который позволит вам выполнить документ и получить pdf без захвата URL-адреса. Ознакомьтесь с их базой знаний для примеров.

person Bogdan Kanivets    schedule 12.05.2012

Почему бы вам просто не сохранить отчет/документ в формате PDF по умолчанию, чтобы при открытии отчета он автоматически создавался в формате PDF.

Если вам не нравится идея сохранять отчет в формате PDF (например, потому что он вам нужен как обычный отчет, и вы не хотите поддерживать две версии одного и того же объекта), вы можете использовать URLAPI для создания PDF с помощью &executionMode=3 и &currentViewMedia=32.

Не уверен в этих параметрах, лучший способ выяснить, какие они (кроме некоторых MicroStrategy TN), — это экспортировать отчет в PDF и проверить URL-адрес.

person mucio    schedule 17.10.2013