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"?
InformationsquelleAutor Gilbou | 2011-09-05
Schreibe einen Kommentar