0

我有一个 Mozilla Firefox 的 Javascript 代码,当它们有特殊条件时,它会在不同的网站中插入一个链接。我正在考虑在我的 Android 手机上做一个应用程序来做同样的事情。我做了一个加载 URL 的应用程序,我可以在 webView 中看到这个网站。现在,我想插入我的 JavaScript 代码,目的是做同样的事情,但我不知道该怎么做。

    public void onCreate(Bundle InstanceState)
     {
    super.onCreate(InstanceState);
    setContentView(R.layout.main);

    webBrowser = (WebView) findViewById(R.id.webkit);
    webBrowser.getSettings().setJavaScriptEnabled(true);
    webBrowser.loadUrl("http://www.onekin.org");
         }

我已经看到我应该使用此功能,但无法让它工作

addJavascriptInterface(对象对象,字符串名称)

有人知道我该怎么做吗?谢谢

4

2 回答 2

1

您必须创建自己的类,其中包含要插入的链接: addJavascriptInterface

 class JavascriptUrlObject {
    @JavascriptInterface
    public String toString() { return "http://the-url-to-insert.com"; }
 }
 webView.addJavascriptInterface(new JavascriptUrlObject (), "injectedObject");
 webView.loadData("", "text/html", null);
 webView.loadUrl("javascript:alert(injectedObject.toString())");

在此示例中,它只是打开一个警报,但您可以在页面中使用它做您想做的事情。

如果对您有帮助,请查看此链接:Android addJavaScriptInterface-Code Project

于 2013-06-26T10:20:04.280 回答
1

您可以尝试使用自己的 WebViewClient:

定义你的链接

private String link = "http://yourlink.html";

将您的代码调整为:

webBrowser.getSettings().setJavaScriptEnabled(true);
webBrowser.setWebViewClient(new TestWebViewClient());
webBrowser.loadUrl("http://www.onekin.org");
// Interface to inject your javascript
webBrowser.addJavascriptInterface(new JavaScriptInterface(), "MYJSINTERFACE");

界面看起来像:

class JavaScriptInterface {
    public void inject(String html) {
        // Here you will get the Javascript executed
    }
}

您的客户注入 JS 的位置:

private class TestWebViewClient extends WebViewClient {

    @Override  
    public void onPageFinished(WebView view, String url) {
        String javascript = "javascript:window.MYJSINTERFACE.inject(document.getElementById('yourlink').href = "+link+");";

        // Inject Javascript in the URL already loaded
        webBrowser.loadUrl(javascript);
    }
}
于 2013-06-26T10:22:05.660 回答