在设置User-agent和处理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。还有一个api叫做org.xwalk.core.internal.XWalkCookieManager它是用来处理webview上的Cookies的。
这两个api都不能在共享模式下访问,请建议如何设置用户代理和处理cookie,而在共享模式下使用人行横道
可以使用XWalkView公共API的以下方法设置User-Agent:
setUserAgentString(java.lang.String userAgent)
详情请参阅Javadoc。
但是关于XWalkCookieManager,我不能提出任何建议。如果你发现有用的东西请告诉我们。
我使用了以下方法来setUserAgent @comrade
mXWalkView.setUserAgentString("MyCustomUserAgent")
对于设置cookie,我采用了以下方法。首先,我得到所有的cookie存储在cookieStore的android将它们转换为字符串,并使字符串的列表。
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函数 syncookies
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端,我用下面的代码在文档
上设置cookiefunction 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];
}
}