Crosswalk共享模式自定义User-agent和CookieManagement
Crosswalk shared mode custom User-agent and CookieManagement
我在设置用户代理和处理 cookie 的共享模式下使用人行横道时遇到问题
1.While 在正常模式下使用人行横道有一个 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.And 还有一个 api 称为 org.xwalk.core.internal.XWalkCookieManager 用于处理 webview 上的 Cookie。
这两个 api 在共享模式下都无法访问,请建议在共享模式下使用人行横道时如何设置用户代理和处理 cookie。
您可以使用XWalkView的以下方法public API设置User-Agent:
setUserAgentString(java.lang.String userAgent)
有关详细信息,请参阅 Javadoc。
但是关于XWalkCookieManager我不能提出任何建议。如果您发现有用的东西,请告诉我们。
我按照@comrade
的说明使用了以下方法来设置UserAgent
mXWalkView.setUserAgentString("MyCustomUserAgent")
对于cookies的设置我采用了下面的方法。首先,我获取存储在 android 的 cookieStore 中的所有 cookie,将它们转换为字符串并制作一个字符串列表。
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];
}
}
我在设置用户代理和处理 cookie 的共享模式下使用人行横道时遇到问题
1.While 在正常模式下使用人行横道有一个 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.And 还有一个 api 称为 org.xwalk.core.internal.XWalkCookieManager 用于处理 webview 上的 Cookie。
这两个 api 在共享模式下都无法访问,请建议在共享模式下使用人行横道时如何设置用户代理和处理 cookie。
您可以使用XWalkView的以下方法public API设置User-Agent:
setUserAgentString(java.lang.String userAgent)
有关详细信息,请参阅 Javadoc。
但是关于XWalkCookieManager我不能提出任何建议。如果您发现有用的东西,请告诉我们。
我按照@comrade
的说明使用了以下方法来设置UserAgentmXWalkView.setUserAgentString("MyCustomUserAgent")
对于cookies的设置我采用了下面的方法。首先,我获取存储在 android 的 cookieStore 中的所有 cookie,将它们转换为字符串并制作一个字符串列表。
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];
}
}