[英]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.