2012-04-17 31 views
12

Tôi đang cố gắng điền vào Biểu mẫu web từ một Webview trong Android. Tôi đã tìm thấy đoạn mã này ở đây: Fill fields in webview automaticallyĐiền vào biểu mẫu trong WebView với Javascript

String username = "cristian"; 
webview.loadUrl("javascript:document.getElementById('username').value = '"+username+"';"); 

Đáng tiếc là tôi không hiểu nơi tôi phải mở trang tôi muốn điền vào

setContentView(R.layout.web); 
final WebView mWebView = (WebView) findViewById(R.id.webview); 
mWebView.getSettings().setJavaScriptEnabled(true); 
mWebView.loadUrl(url); 
String user="u"; 
String pwd="p"; 
mWebView.loadUrl("javascript:document.getElementById('username').value = '"+user+"';document.getElementById('password').value='"+pwd+"';"); 

Khi tôi cố gắng theo cách này. , trang web được hiển thị nhưng không có bất kỳ giá trị nào trong các biểu mẫu.

Cảm ơn bạn đã giúp đỡ

+0

hey. bạn có thể tham khảo bất kỳ ví dụ đầy đủ nào không. Tôi đã không làm việc với loại mã này trước đây. –

+0

Điều này hiệu quả đối với tôi [Truyền nhiều dữ liệu trong WebView bằng javascript] (https://stackoverflow.com/a/48349575/8018480) –

Trả lời

19

Bạn nên điền các giá trị sau khi trang đã được tải. Đây là ví dụ về cách sử dụng mã của bạn:

mWebView.loadUrl(url); 
mWebView.getSettings().setJavaScriptEnabled(true); 
mWebView.setWebViewClient(new WebViewClient() { 
    public void onPageFinished(WebView view, String url) { 
     String user="u"; 
     String pwd="p"; 
     view.loadUrl("javascript:document.getElementById('username').value = '"+user+"';document.getElementById('password').value='"+pwd+"';"); 
    } 
}); 
+0

tôi đã thử bằng cách sử dụng trang code.web của bạn đang tải nhưng các trường không được lấp đầy bởi dữ liệu đó .it của trống chỉ. bạn có thể nói làm thế nào để viết mã javascript cho việc này. – user1213202

+0

Bạn có thể có tên khác cho phần tử 'tên người dùng' hoặc 'mật khẩu'. Bạn nên thay thế những tên đó bằng tên trường thực tế của trang web của bạn. – gnpaolo

+0

này. bạn có thể tham khảo bất kỳ ví dụ đầy đủ nào không. Tôi đã không làm việc với loại mã này trước đây. –

0

Tôi đã gặp vấn đề tương tự và sau khi làm theo các giải thích khác nhau về stackOverflow, tôi thành công để làm việc của tôi.

đây là cách tiếp cận của tôi

webView.loadUrl(url); 
     webView.getSettings().setDomStorageEnabled(true); 
     webView.setWebViewClient(new WebViewClient(){ 
      public void onPageFinished(WebView view, String url) { 
       String email="[email protected]"; 

       //view.loadUrl("javascript:document.getElementById('email').value = '"+email+"'"); 
       view.loadUrl("javascript:document.forms[0].email.value = '"+email+"';"); 
       Log.d("email", "can not add email"); 
      } 
     }); 

2 điều: 1), bạn cần phải thêm dòng này webView.getSettings().setDomStorageEnabled(true); (tham khảo: Android WebView always returns null for javascript getElementById on loadUrl)

2) bạn cần truy cập vào biến trong mã php của bạn bằng cách sử dụng view.loadUrl("javascript:document.forms[0].email.value = '"+email+"';"); như bạn có thể thấy trong mã của tôi, tôi đã sử dụng giải pháp được đề xuất bởi @gnpaolo, nhưng nó không hoạt động cho tôi vì vậy tôi đã nhận xét và sử dụng cái này. (tham khảo: How to inject a String into Android WebView)

Cuối cùng, chỉ muốn thêm rằng bạn không cần phải tạo một javascript đặc biệt.

một điều nữa các forms[0] là vị trí của biến dưới dạng php, và trong trường hợp của tôi, tôi có email của người dùng, vì vậy tôi đã viết view.loadUrl("javascript:document.forms[0].email.value = '"+email+"';");

Hope, điều này có thể giúp đỡ người khác.

16

Android 4.4 mới WebView có vấn đề với phương thức sử dụng loadUrl("javascript:"), chuỗi paramter sẽ là giải mã url trước khi thực thi. Bạn có thể thử sử dụng evaluateJavascript() cho API> = 19 và loadUrl() cho API < 19. Mã bên dưới phù hợp với tôi.

mWebView.loadUrl(url) 
    WebSettings settings = mWebView.getSettings(); 
    settings.setJavaScriptEnabled(true); 

    String js = "javascript:document.getElementById('username').value = '"+user+"';document.getElementById('password').value='"+pwd+"';"; 
    mWebView.setWebViewClient(new WebViewClient() { 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 

      if (Build.VERSION.SDK_INT >= 19) { 
       view.evaluateJavascript(js, new ValueCallback<String>() { 
        @Override 
        public void onReceiveValue(String s) { 

        } 
       }); 
      } else { 
       view.loadUrl(js); 
      } 
     }); 
    } 

vui lòng tham khảo: loadUrl("javascript:....") behaviour changed incompatibly in Android 4.4

+0

Vui lòng xem xét chỉnh sửa bài đăng của bạn để thêm giải thích thêm về mã của bạn và lý do mã sẽ giải quyết vấn đề. Một câu trả lời mà hầu hết chỉ chứa mã (ngay cả khi nó hoạt động) thường không giúp OP hiểu được vấn đề của họ. – SuperBiasedMan

+0

@awind tôi có thể nhận phản hồi ajax sau khi gửi dữ liệu biểu mẫu không? hiển thị trang web biểu mẫu trong chế độ xem web từ url từ xa –

+0

Tuyệt vời! Câu trả lời này chính xác hơn từ năm 2015)) – micsha123

0

Chỉ cần Enable DomStorage và viết "var x =" chuỗi:

webview.getSettings().setJavaScriptEnabled(true); 
web.getSettings().setDomStorageEnabled(true); 

webview.loadUrl(urlString); 
webview.setWebViewClient(new WebViewClient(){ 

public void onPageFinished(WebView view, String url){ 
super.onPageFinished(view, url); 
String js = "javascript:var x=document.getElementById('username').value = '"+user+"';var y=document.getElementById('password').value='"+pass+"';"; 

if (Build.VERSION.SDK_INT >= 19) { 
     view.evaluateJavascript(js, new ValueCallback<String>() { 
      @Override 
      public void onReceiveValue(String s) { 

      } 
     }); 
    } else { 
     view.loadUrl(js); 
    } 

view.loadUrl(js); 
} 
}); 
Các vấn đề liên quan