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");
招不工作了...有一個安全的原因是什麼?
你有什麼樣的錯誤?你傾銷了由此產生的DOM,以確認你的節點真的不在那裏(而不是由於CSS規則或什麼顯示)? – CommonsWare
沒有顯示錯誤。當我用「document.getElementsByTagName('body')替換job()函數的內容時,我做了同樣的觀察。item(0).innerHTML ='sss';」 - > JS沒有在遠程文件上執行。 「傾銷」到底意味着什麼? – Gilbou