2012-01-21 47 views
4

所以,在閱讀圍繞我讀,我可以「注入」的JavaScript到加載的網頁以編程方式填充網站的形式,所以我嘗試以下操作:在WebView中使用JavaScript

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    WebView WebView; 
    WebView = (WebView) findViewById(R.id.webview); 
    WebView.setWebViewClient(new HelloWebViewClient()); 
    WebView.getSettings().setJavaScriptEnabled(true); 
    WebView.getSettings().setBlockNetworkImage(false); 
    WebView.loadUrl("http://www.kingsage.es"); 
    String username = "XXX"; 
    String Password = "YYY"; 
    WebView.loadUrl("javascript:document.getElementById('login_player').value='"+username+"';javascript:document.getElementById('login_passwd').value = '"+Password+"';"); 
} 

然而,當我運行這個在模擬器上,我收到一個錯誤,好像無法找到網站。如果我關閉第二個loadUrl方法我加載網站,但我需要以編程方式填寫登錄表格!,我想我做錯了什麼,但我沒有找到並回答周圍的閱讀。任何幫助,將不勝感激!!

+0

它甚至顯示網站開始? www.google.com試試看看它是否顯示出來。 – JoxTraex

+0

對我的解決方案有幫助嗎? – JeanLuc

回答

6

則需要等到網頁加載(使用WebViewClient),然後執行你的JavaScript

webView.setWebViewClient(new WebViewClient(){ 
    @Override 
    public void onPageFinished (WebView webView, String url) 
    { 
     webView.loadUrl("javascript:document.getElementById('login_player').value='"+username+"';javascript:document.getElementById('login_passwd').value = '"+Password+"';"); 
    } 
}); 

同時也要確保你只執行一次,而不是在每一個onPageFinished事件

+0

需要幫助! http://stackoverflow.com/questions/33249207/android-webview-auto-sign-in – Juni

1

我喜歡JeanLuc的建議它對我來說98%的工作。我仍然需要自動登錄用戶進入網頁,一旦他們的用戶名和密碼已經輸入,所以我做了以下工作,並且運行良好,除了試圖刪除「您是否想記住密碼」消息。

@Override 
      public void onPageFinished (WebView webView, String url) 
      { 
        webView.loadUrl("javascript:document.getElementById('Login1_UserName').value='"+userName+"';javascript:document.getElementById('Login1_Password').value = '"+password+"';"); 
        webView.loadUrl("javascript:document.getElementById('Login1_LoginButton').click();"); 
      } 

的第二行的「登錄」按鈕,並在自動登錄他們。希望它可以幫助別人。

+0

我可以在一個網站上應用相同的代碼,我不擁有?需要緊急回覆...因爲我有問題 – Juni

+0

這段代碼是針對一個網站的,我沒有任何控制權。所以如果我理解了你的問題,那麼答案是肯定的。 – timv

+0

我剛剛取代了一些值,並在我的頁面上實現完成,但沒有做我想要的東西...我想我不喜歡發帖子的另一個問題 – Juni

0

這是我如何來達到的它在我的情況,我必須瀏覽一個頁面,填寫文本框和提交

WebView webView = FindViewById<WebView>(Resource.Id.webEspView); 
webView.SetWebViewClient(new Client()); 
webView.Settings.JavaScriptEnabled = true; 
webView.LoadUrl("http://192.168.4.1") 

然後添加客戶端類並重載onPageFinished()方法。

public class Client : WebViewClient 
{ 
    public override void OnPageFinished(WebView view, string url) 
    { 
     base.OnPageFinished(view, url); 
     string ssid = Variables.GetInitialUsername();   
     ssid = ssid.Trim(new char[] {'\"'}); 
     string pass = Variables.GetInitialPassword(); 

     var script = $"document.getElementById(\"clientId\").value = \"{ssid}\";" + 
        $"document.getElementById(\"branchId\").value = \"{pass}\";" +       
        "document.querySelector('button[type=\"submit\"]').click()";   
     view.LoadUrl($"javascript: {script}"); 


    } 
} 

希望它有幫助。

相關問題