Android - laden und ausführen von javascript auf externe Webseite
Lässt vermuten, möchte ich hinzufügen, dass ein <div>hello</div>
eine der unten auf der Webseite http://www.google.com, die ich geladen habe in einem WebView. Ist es möglich?
Kann ich es für eine interne Webseite (eine Seite, die sich auf dem internen Speicher des Gerätes).
Hier ist der code meiner Tätigkeit:
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 );
}
}
Den Inhalt script.js befindet sich in der "/assets" - Ordner:
function job() {
var div = document.createElement('div');
div.innerHTML = 'hello';
document.getElementsByTagName('body').item(0).appendChild(div);
}
Werden und der Inhalt page.html befindet sich in der "/assets" - Ordner zu:
<html>
<head></head>
<body>
<div>content of my page</div>
</body>
</html>
ABER
Wenn ich
mWebview.loadUrl("file:///android_asset/page.html");
//mWebview.loadUrl("http://www.google.com");
durch
//mWebview.loadUrl("file:///android_asset/page.html");
mWebview.loadUrl("http://www.google.com");
der trick funktioniert nicht mehr... gibt es eine Sicherheit Grund?
- Erhalten Sie jede Art von Fehler? Haben Sie warfen die resultierende DOM, um zu bestätigen, dass Ihr Knoten ist wirklich nicht da (vs. einfach nicht angezeigt wird aufgrund von CSS-Regeln oder so etwas)?
- Es wird kein Fehler angezeigt. Ich machte die gleiche Beobachtung, wenn ich ersetzen Sie den Inhalt des job () - Funktion durch "Dokument.getElementsByTagName('body').item(0).innerHTML='sss';" -> JS nicht ausgeführt, auf einem remote-Datei. Was meinst du genau mit "gekippt"?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie einen Ordner "raw" in der res : res/raw. dann host yourFile.html in den Ordner raw. dann mit dem code :