Передать параметр в скрипт начальной загрузки GWT .nocache.js - PullRequest
5 голосов
/ 04 декабря 2010

Есть ли способ передать параметры в файл сценария .nocache.js, сгенерированный GWT, и оценить их в функции onModuleLoad? Вот так:

<script type="text/javascript" src="application/Application.nocache.js?appId=461333815262909"></script>

URL-адрес страницы хоста должен быть полностью отделен от содержимого GWT, работающего внутри, поэтому передача параметра appId в качестве параметра запроса для страницы хоста и обращение к нему с помощью Window.Location.getParameter не является опцией. Я знаю, что могу скрыть такие параметры, например, в скрытых DIV, а затем запрашивать их из скрипта, но, если это возможно, я бы хотел избежать дальнейшей зависимости на странице хоста.

Спасибо! Lisa

Ответы [ 3 ]

3 голосов
/ 26 апреля 2011

Вместо того, чтобы скрывать информацию в скрытых элементах div, которые могут запутаться, проще всего передавать аргументы через метатеги HTML.

На странице HTML, которая вызывает скрипт GWT, добавьте метатег следующим образом:

<html>
  <head>
    <meta name="appId" content="461333815262909">
    ...

Затем, в точке входа вашего модуля, проанализируйте его следующим образом:

@Override
public void onModuleLoad() {
    NodeList<Element> metas = Document.get().getElementsByTagName("meta");
    for (int i=0; i<metas.getLength(); i++) {
        MetaElement meta = (MetaElement) metas.getItem(i);
        if ("appId".equals(meta.getName())) {
            Window.alert("Module loaded with appId: " + meta.getContent());
        }
    }
}

Конечно, это не так просто, как передать аргумент в URL-адресе src тега script, но я считаю, что это немного чище, чем скрытие div в содержимом документа, и менее подвержено ошибкам, чем искусственный повторный анализ скрипта атрибут источника тега.

2 голосов
/ 04 декабря 2010

Похоже, в GWT нет встроенной поддержки, но в последнее время я нашел следующее решение:

Предполагая, что ваш скрипт всегда следует соглашению об именах "/<moduleName>.nocache.js", вы можете извлечь все элементы <script> со страницы хоста и найти тот, который ссылается на это в атрибуте src. Затем вы можете извлечь атрибуты в кодировке URL.

Вот мой пример реализации, предназначенный для вызова с GWT.getModuleName() в качестве первого параметра.

/**
 * Fetches a parameter passed to the module's nocache script.
 * 
 * @param moduleName the module's name.
 * @param parameterName the name of the parameter to fetch.
 * @return the value of the parameter, or <code>null</code> if it was not
 *   found.
 */
public static native String getParameter( String moduleName, String parameterName ) /*-{
    var search = "/" + moduleName + ".nocache.js";
    var scripts = $doc.getElementsByTagName( "script" );
    for( var i = 0; i < scripts.length; ++i ) {
        if( scripts[ i ].src != null && scripts[ i ].src.indexOf( search ) != -1 ) {
            var parameters = scripts[ i ].src.match(/\w+=\w+/g);
            for( var j = 0; j < parameters.length; ++j ) {
                var keyvalue = parameters[ j ].split( "=" );
                if( keyvalue.length == 2 && keyvalue[ 0 ] == parameterName ) {
                    return unescape( keyvalue[ 1 ] );
                }
            }
        } 
    }
    return null;
}-*/;   

Предложения по улучшению приветствуются.

2 голосов
/ 04 декабря 2010

Нет, но эта статья может быть полезна при передаче параметров с сервера клиентскому сценарию для оценки загрузки страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...