2014-09-22 2 views
3

Я разрабатываю приложение android/tizen, используя проект crosswalk. Теперь мне нужно изменить агент пользователя для просмотра страницы в настольной версии. Можно ли изменить агент пользователя и как? Спасибо!Возможно ли изменить пользовательский агент в Crosswalk Android/Tizen-Apps?

ответ

1

Используйте этот фрагмент кода:

XWalkView mXWalkView; 
mXWalkView.getSettings().setUserAgentString("Your User Agent"); 
+1

Пожалуйста, добавьте некоторое объяснение того, что делает ваш код и как он работает, чтобы новички, подобные OP, могли учиться на ответ. –

+0

Не удалось решить мою актуальную проблему, но сервер распознает новый пользовательский агент. Спасибо! :) – Jonson

+1

с перекрестка 9 на этом больше не будет работать. – Ostkontentitan

3

В документации ничего нет. Единственным способом использования является использование setResourceClient и WebResourceResponse для изменения агента пользователя. Пример использования:

setResourceClient(new XWalkResourceClient(this) { 
    @Override 
    public WebResourceResponse shouldInterceptLoadRequest(XWalkView view, String url) { 
     try { 
      URL u = new URL(url); 
      HttpURLConnection c = (HttpURLConnection) u.openConnection(Proxy.NO_PROXY); 
      c.setRequestProperty("User-agent", "test user agent"); 
      return new WebResourceResponse(null, "utf-8", c.getInputStream()); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return super.shouldInterceptLoadRequest(view, url); 
    } 
}); 
+0

Это работает, но это замедляет производительность и время загрузки. Это очень интересный ответ, я многому научился. Спасибо! – Jonson

+0

Решение может быть использовано только для первого URL-адреса (скил для загрузки других ресурсов, изображений и т. Д.) – Kenumir

0

Это для веб-приложений, где вы можете изменить JS-файлов .:

я использую это временное решение, оно работает а также с Crosswalk 9.

xview.addJavascriptInterface(new Object(){ 
      @JavascriptInterface 
      public String getNewUserAgent(){ 
       return "My User Agent"; 
      } 
     }, "NativeInterface"); 

И в моем веб-приложении i ju й вызов:

navigator.ua = NativeInterface.getNewUserAgent(); 
+0

Спасибо. До сих пор я использую Crosswalk 8, но это интересная информация! – Jonson

1

Новый API для установки агента пользователя в проекте и будет выпущен в Пешеходный переход-12, примерно в конце января следующего года.

Это будет выглядеть так: xwalkView.setUserAgentString (newUserAgentString);

+0

Источник: https://www.mail-archive.com/[email protected]/msg00634.html – cprcrack

5

Я использовал отражение, чтобы решить эту проблему, пока этот API не станет общедоступным в Crosswalk 12. Это работает в Crosswalk 9.38.208.10.

private void setWebViewUserAgent(XWalkView webView, String userAgent) 
{ 
    try 
    { 
     Method ___getBridge = XWalkView.class.getDeclaredMethod("getBridge"); 
     ___getBridge.setAccessible(true); 
     XWalkViewBridge xWalkViewBridge = null; 
     xWalkViewBridge = (XWalkViewBridge)___getBridge.invoke(webView); 
     XWalkSettings xWalkSettings = xWalkViewBridge.getSettings(); 
     xWalkSettings.setUserAgentString(userAgent); 
    } 
    catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) 
    { 
     // Could not set user agent 
     e.printStackTrace(); 
    } 
} 
+0

Спасибо. Это сработало. – Ataru

+0

Эй, похоже, 'getSettings' больше не доступен. Есть ли другие способы сделать это? – tehmaestro

Смежные вопросы