«Content-Security-Policy», «frame-ancestors *» от android_asset - PullRequest
0 голосов
/ 15 мая 2019

Я пишу Android-приложение, которое загружает локальную веб-страницу, и эта страница публикует сообщения во внутреннем фрейме, который в ответ отображает данные об этом пользователе.

Удаленный сайт отказывается отображаться на моем android_asset/page.html из-за:

Refused to display 'https://example/foo/bar' in a frame because an ancestor violates the following Content Security Policy directive: "frame-ancestors *".

Мой код:

    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.setWebViewClient(webViewClient);
    mWebView.setWebChromeClient(webChromeClient);
    mWebView.getSettings().setAllowFileAccessFromFileURLs(true);
    mWebView.getSettings().setAllowFileAccess(true);
    mWebView.getSettings().setAllowUniversalAccessFromFileURLs(true);
    // this should do the trick... but it does not
    Map<String, String> extra  = new HashMap<>();
    extra.put("Content-Security-Policy", "frame-ancestors *" );
    mWebView.loadUrl("file:///android_asset/page.html", extra);

Кстати: это не поможет, так как не поддерживается:

 <head>
    <meta http-equiv="Content-Security-Policy" content="frame-ancestors *">
 </head>

1 Ответ

0 голосов
/ 19 мая 2019

Решение было простым:

Я изменил с loadUrl() на loadDataWithBaseUrl(), код:

    try {
        String thePage = readRawText(getAssets().open("page.html"));
        mWebView.loadDataWithBaseURL("https://my-epic-site/", thePage, "text/html", "utf-8", "about:blank");
    } catch (IOException e) {
        e.printStackTrace();
    }

public static String readRawText(InputStream inputStream) throws IOException {
    if (inputStream == null) {
        return null;
    }

    BufferedReader bufferedReader= new BufferedReader(new InputStreamReader(inputStream));
    StringBuilder fileContent = new StringBuilder();
    String currentLine = bufferedReader.readLine();
    while (currentLine != null) {
        fileContent.append(currentLine);
        fileContent.append("\n");
        currentLine = bufferedReader.readLine();
    }
    return fileContent.toString();
}

Это делает страницу, кажется, что она возниклатот же домен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...