Пользовательский пользовательский агент и CookieManagement в общем режиме пешеходного перехода

У меня проблема при использовании пешеходного перехода в общем режиме с настройкой User-agent и обработкой файлов cookie.

1. При использовании пешеходного перехода в обычном режиме существует API org.xwalk.core.internal.XWalkViewBridge, с помощью которого я устанавливаю пользовательский агент для веб-просмотра java.lang.reflect.Method ___getBridge=XWalkView.class .getDeclaredMethod("getBridge"); ___getBridge.setAccessible(true);

XWalkViewBridge xWalkViewBridge = null;
xWalkViewBridge = (XWalkViewBridge)___getBridge.invoke(webView);
XWalkSettings xWalkSettings = xWalkViewBridge.getSettings();
xWalkSettings.setUserAgentString(userAgent);

2. И есть еще один API, известный как org.xwalk.core.internal.XWalkCookieManager, который используется для обработки файлов cookie в веб-просмотре.

Оба этих API недоступны в общем режиме. Пожалуйста, предложите, как настроить пользовательский агент и обрабатывать файлы cookie при использовании пешеходного перехода в общем режиме.


person hariszaman    schedule 28.07.2015    source источник
comment
кто-нибудь может ответить на мой вопрос?   -  person hariszaman    schedule 29.07.2015


Ответы (2)


Вы можете использовать следующий метод общедоступного API XWalkView для установки User-Agent:

setUserAgentString(java.lang.String userAgent)

См. Javadoc для более подробной информации.

Но по поводу XWalkCookieManager ничего подсказать не могу. Дайте нам знать, если вы найдете что-то полезное.

person comrade    schedule 29.07.2015

Я использовал следующий метод для установки UserAgent, как сказал @comrade

mXWalkView.setUserAgentString("MyCustomUserAgent")

Для настроек куки я применил следующий подход. Сначала я получаю все файлы cookie, хранящиеся в cookieStore Android, скрывая их в String и составляя список строк.

public List<String> getAllCookies(){
        List<Cookie> cookies=instance.cookieStore.getCookies();
        List<String> cookiesList = new ArrayList<String>();
        for(Cookie cookie: cookies)
        {
            String cookieString = cookie.getName() + "=" + cookie.getValue() + "; Path=" + cookie.getPath();// + "; Domain=" + cookie.getDomain()

            String expires = null;
            if (cookie.getExpiryDate() != null) {
                expires = android.text.format.DateFormat.format("EEE, dd-MMM-yyyy hh:mm:ss z", cookie.getExpiryDate()).toString();
                cookieString = cookieString + "; Expires=" + expires;
            }
            cookiesList.add(cookieString);

        }
        return cookiesList;
    }

Как только это будет сделано в моем CustomXWalkActivity onPageLoadFinished, я получаю список этих файлов cookie, преобразую их в JSONObject, а затем вызываю функцию javascript syncCookies.

 private boolean isLoadingFirstTime=true;
 private void updateCookies() {
     List<String> cookies = getAllCookies();
     JSONObject cookiesObj = new JSONObject();

     for(String cookie : cookies){
         Log.d(TAG, "cookie:" + cookie);
         int iend = cookie.indexOf("=");
         try {
            cookiesObj.put(cookie.substring(0, iend), cookie);
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

     }
     Log.d(TAG, "All the cookies:" + cookiesObj);

     StringBuilder buf=new StringBuilder("javascript:syncCookies('"+cookiesObj+"')");
     mXWalkView.load(buf.toString(), null);

}
    @Override
    public void onLoadFinished(XWalkView view, String url) {
            Log.d(TAG, "load finished:"+url);
            if(isLoadingFirstTime){
                updateCookies();
                isLoadingFirstTime=false;
            }
            mXWalkView.clearCache(true);

            super.onLoadFinished(view, url);
        }

А затем на стороне Javascript у меня есть следующий код для установки файлов cookie в документе

function syncCookies(cookies){
    console.log("sync cookies called",cookies);
    var allCookies=JSON.parse(cookies);
    for (var key in allCookies) {
        console.log("cookie to be set", allCookies[key]);
        document.cookie=testCookies[key];
    }
}
person hariszaman    schedule 30.07.2015