2010-11-02 8 views

Odpowiedz

1

Navajo,

Co próbujesz zrobić nie można zrobić z powyższego adresu URL z ograniczeniami, które zostały wykonane powyżej. Głównym powodem tego jest to, że URL powyżej jest adresem URL GET. URL POST nie zawiera powyższych parametrów. Są one przekazywane w aktualnym ŻĄDANIU, a nie w adresie URL.

Aby wykonać to, co chcesz zrobić, musisz przechwycić zamiar, ponownie sformatować adres URL, a następnie uruchomić przeglądarkę z nowym zamierzeniem. Źródłem adresu URL jest klucz. Jeśli źródło pochodzi od Ciebie lub coś, co możesz śledzić, to jest łatwe, po prostu utwórz niestandardowy cel. Jeśli źródło jest poza Twoją kontrolą, możesz napotkać problemy (patrz poniżej) ...

1) GET i POST nie są wymienialne. Jeśli masz kłopoty z danymi, które nie należą do Ciebie lub nie udajesz się do strony, którą kontrolujesz, możesz złamać funkcjonalność tej witryny, ponieważ nie wszystkie programy dla GET i POSTs ze względów bezpieczeństwa.

2) Jeśli odpowiadasz na to samo intencje, które robi przeglądarka, możliwe, że użytkownik nie rozumie, co robi twoja aplikacja, jeśli zawsze otwiera domyślną.

Inną możliwością (jeśli kontrolujesz witrynę) jest reakcja na intencję poprzez utworzenie pliku cookie, który Twoja witryna może odczytać z aktualnymi wymaganiami dotyczącymi danych. Wymagałoby to PHP/ASP na serwerze lub aktywowanego JS HttpRequest().

Gdybym miał więcej informacji, mógłbym ci lepiej doradzić.

FuzzicalLogic

11

Można to zrobić, ale w skomplikowany sposób.

Możesz utworzyć mały plik HTML z formularzem automatycznego przesyłania, odczytać go w łańcuchu, zamienić params i osadzić w intencji jako uri zamiast adresu URL. Istnieje kilka drobnych negatywnych rzeczy, działa tylko wywołując domyślną przeglądarkę bezpośrednio, a sztuczka zostanie zapisana w historii przeglądarki, pojawi się, jeśli przejdziesz z powrotem.

Oto przykład:

plik HTML (/ RES/raw): Kod

<html> 
    <body onLoad="document.getElementById('form').submit()"> 
     <form id="form" target="_self" method="POST" action="${url}"> 
      <input type="hidden" name="param1" value="${value}" /> 
      ... 
     </form> 
    </body> 
</html> 

Źródło:

private void browserPOST() { 
    Intent i = new Intent(); 
    // MUST instantiate android browser, otherwise it won't work (it won't find an activity to satisfy intent) 
    i.setComponent(new ComponentName("com.android.browser", "com.android.browser.BrowserActivity")); 
    i.setAction(Intent.ACTION_VIEW); 
    String html = readTrimRawTextFile(this, R.raw.htmlfile); 

    // Replace params (if any replacement needed) 

    // May work without url encoding, but I think is advisable 
    // URLEncoder.encode replace space with "+", must replace again with %20 
    String dataUri = "data:text/html," + URLEncoder.encode(html).replaceAll("\\+","%20"); 
    i.setData(Uri.parse(dataUri)); 
    startActivity(i); 
} 

private static String readTrimRawTextFile(Context ctx, int resId) { 
    InputStream inputStream = ctx.getResources().openRawResource(resId); 

    InputStreamReader inputreader = new InputStreamReader(inputStream); 
    BufferedReader buffreader = new BufferedReader(inputreader); 
    String line; 
    StringBuilder text = new StringBuilder(); 
    try { 
     while ((line = buffreader.readLine()) != null) { 
      text.append(line.trim()); 
     } 
    } 
    catch (IOException e) { 
     return null; 
    } 
    return text.toString(); 
} 
+0

Powyższe działa również dla mnie. Ale czy można to zrobić za pomocą _Chrome Custom Tabs_ w podobny sposób? Obawiam się, że to hack, który można naprawić wcześniej niż później. – xanderiel

Powiązane problemy