2011-09-05 37 views
2

讓我們假設我想添加一個<div>hello</div>作爲我在WebView中加載的網頁http://www.google.com的底部。可能嗎?Android - 在外部網頁上加載並執行javascript

我可以做一個內部網頁(位於設備內部存儲器的頁面)。

這裏是我的活動代碼:

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.Toast; 

public class Main extends Activity { 

    private WebView mWebview; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     mWebview = new WebView(this); 
     mWebview.getSettings().setJavaScriptEnabled(true); 

     final Activity activity = this; 

     mWebview.setWebViewClient(new WebViewClient() { 

      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       Toast.makeText(activity, description, Toast.LENGTH_SHORT).show(); 
      } 

      private final String jsFileURL = "file:///android_asset/script.js"; 

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

       final WebView v = view; 

       view.loadUrl("javascript:{" + 
         "var script = document.createElement('script');" + 
         "script.type = 'text/javascript';" + 
         "script.src = '" + jsFileURL + "';" + 
         "document.getElementsByTagName('head').item(0).appendChild(script); };"); 

       new Handler().postDelayed(new Runnable() { 

        @Override 
        public void run() { 
         v.loadUrl("javascript:job();"); 
        } 

       }, 100); 

       } 

     }); 

     mWebview.loadUrl("file:///android_asset/page.html"); 
     //mWebview.loadUrl("http://www.google.com"); 

     setContentView(mWebview); 

    } 

} 

的script.js位於 「/資產」 文件夾中的內容:

function job() { 
    var div = document.createElement('div'); 
    div.innerHTML = 'hello'; 
    document.getElementsByTagName('body').item(0).appendChild(div); 
} 

內容page.html位於「/資產」文件夾中:

<html> 
<head></head> 
<body> 
<div>content of my page</div> 
</body> 
</html> 

如果我改變

mWebview.loadUrl("file:///android_asset/page.html"); 
//mWebview.loadUrl("http://www.google.com"); 

通過

//mWebview.loadUrl("file:///android_asset/page.html"); 
mWebview.loadUrl("http://www.google.com"); 

招不工作了...有一個安全的原因是什麼?

+0

你有什麼樣的錯誤?你傾銷了由此產生的DOM,以確認你的節點真的不在那裏(而不是由於CSS規則或什麼顯示)? – CommonsWare

+0

沒有顯示錯誤。當我用「document.getElementsByTagName('body')替換job()函數的內容時,我做了同樣的觀察。item(0).innerHTML ='sss';」 - > JS沒有在遠程文件上執行。 「傾銷」到底意味着什麼? – Gilbou

回答

2

在res:res/raw中創建一個文件夾「raw」。然後在raw文件夾中託管yourFile.html。然後用您的代碼:

String link = this.getApplicationContext()。getFilesDir()+「raw/yourFile.html」;

mWebview.loadUrl(link);

相關問題