不允许将顶部框架导航到数据网址(Android)

时间:2017-08-30 11:46:37

标签: android android-webview

我有一个带有自定义WebViewClient类的WebView,它允许我对用户对WebView内部链接的点击作出反应并处理它们。 这是代码:

class WebViewClickClient extends WebViewClient {

    @Override
    public void onPageFinished(WebView view, String url) {
        String note = "";
        String note_id = new String(url);
        if (note_id.contains("#")) {
            int offset = note_id.indexOf("#");
            note_id = note_id.substring(offset + 1, note_id.length());
        }
        for (int i = 0; i < bookNotes.size(); i++) {
            if (bookNotes.get(i).noteId().equals(note_id)) {
                note = bookNotes.get(i).noteSection();
                break;
            }
        }
        if (!note.isEmpty()) {
            Toast.makeText(getContext(), note, LENGTH_LONG).show();
        }
    }

现在它不再起作用了,点击时甚至没有触发WebViewClient的方法。相反,我收到此消息:I/chromium: [INFO:CONSOLE(0)] "Not allowed to navigate top frame to data URL:"

我是否需要立即使用JavaScript处理此问题,或者是否有适用于Android的WebView的解决方法?

更新 对于任何对使用JS接口进行解决方案感兴趣的人来说,我就是这样做的。

对用户点击作出反应的逻辑从onPageFinished方法移至

private class JSInterface {
public void showToast(String key) {...}
}

然后,WebView创建如下:

WebView book_view;
book_view = (WebView) view.findViewById(R.id.web_text_view);
book_view.getSettings().setJavaScriptEnabled(true);

book_view.addJavascriptInterface(new JSInterface(), "JAVA_CODE");

JAVA_CODE对象将从JavaScript代码中调用,该代码必须通过将文本内容与JS连接并在WebView上调用loadData()方法动态添加到每个WebView“页面”。

StringBuilder j_script = new StringBuilder();
if (note_ids.size() > 0) {
    j_script.append("<script type=\"text/javascript\">\nfunction jscallback()\n{");
    for (int i = 0; i < note_ids.size(); i++) {
         j_script.append("var dv" + i + " = document.getElementById(\"" + note_ids.get(i) + "\");\ndv" + i + ".onclick = function() {JAVA_CODE.showToast(\"" + note_ids.get(i) + "\")};\n");
    }
    j_script.append("}</script>");
}

0 个答案:

没有答案