繁体   English   中英

Crosswalk共享模式自定义用户代理和CookieManagement

[英]Crosswalk shared mode custom User-agent and CookieManagement

在设置用户代理和处理Cookie的共享模式下使用人行横道时遇到问题

1.在正常模式下使用人行横道时,有一个api org.xwalk.core.internal.XWalkViewBridge ,我使用它来设置webview的用户代理java.lang.reflect.Method ___ getBridge = XWalkView.class.getDeclaredMethod(“ getBridge”) ; ___ getBridge.setAccessible(真);

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

2.还有另一个称为org.xwalk.core.internal.XWalkCookieManager的 api,用于处理webview上的Cookies。

这两种api在共享模式下均不可访问,请提出在共享模式下使用人行横道时如何设置用户代理和处理cookie的建议。

您可以使用XWalkView公共API的以下方法来设置User-Agent:

setUserAgentString(java.lang.String userAgent)

有关更多详细信息,请参见Javadoc

但是关于XWalkCookieManager我什么也没建议。 如果您发现有用的信息,请告诉我们。

我按照@comrade的说明使用以下方法来设置UserUserAgent

mXWalkView.setUserAgentString("MyCustomUserAgent")

对于设置Cookie,我采用了以下方法。 首先,我将所有存储在android的cookieStore中的cookie隐式地转换为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];
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM