在共享模式下使用人行横道设置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上的Cookie。
在共享模式下无法访问这两个api,请建议如何在共享模式下使用crosswalk时设置用户代理和处理cookie。
答案 0 :(得分:0)
您可以使用以下XWalkView公共API方法来设置User-Agent:
setUserAgentString(java.lang.String userAgent)
有关详细信息,请参阅Javadoc。
但是关于XWalkCookieManager,我无法提出任何建议。如果您发现有用的东西,请告诉我们。
答案 1 :(得分:0)
我按照@comrade
的说法使用了以下方法来setUserAgentmXWalkView.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];
}
}