Xamarin Android Webview: не разрешено загружать локальный ресурс «file:///android_asset/*.css» источник: (1)?

У меня есть небольшой файл CSS, который я использую с JavaScript, чтобы переопределить CSS на веб-сайте, загруженном в WebView. Я хотел бы загрузить его локально, а не получать к нему доступ в Интернете. Я заставил JavaScript работать отлично, когда файл загружается на временный файловый хост, поэтому он работает нормально, но что-то в отношении разрешений не позволяет мне использовать его в качестве актива.

Я пытался установить разрешения, изменить настройки WebView, чтобы всегда разрешать MixedContentMode, пытался использовать LoadData и т. д., но всегда возникает проблема «Не разрешено». Ресурс имеет действие сборки AndroidAsset.

string jsToInject = "javascript: var link=document.createElement('link');link.href='file:///android_asset/newsOverride.css';link.type ='text/css'; link.rel ='stylesheet';document.getElementsByTagName('head')[0].appendChild(link);";

view.LoadUrl(jsToInject);

Когда в поле link.href указан файл, размещенный где-то в Интернете, он загружает CSS, как и ожидалось. Но когда он выбран в качестве актива, он просто выбрасывает I/chromium(11626): [INFO:CONSOLE(1)] "Not allowed to load local resource: file:///android_asset/newsOverride.css", source: (1)

Все, что мне удалось найти по ошибке, связано с Xamarin Forms, а не с Xamarin Android, любая помощь приветствуется.

Вы пытались реализовать WebViewClient с переопределением shouldInterceptRequest, как этот поток stackoverflow.com/questions/19997146/…

Leon Lu - MSFT 10.04.2019 08:05

Это сделало это. Он попадал в блок catch, но это было потому, что вам не нужен файл:///android_asset/ перед именем файла актива в Xamarin. Какой странный обходной путь.

W. Hoffman 10.04.2019 14:23

Да, это странно, вы решили эту проблему? Если да, могу ли я опубликовать свой комментарий, чтобы ответить и принять его? Помогает другим искать вопросы, чтобы помочь, чтобы они не тратили время на вопросы, на которые есть ответы. Спасибо!

Leon Lu - MSFT 11.04.2019 09:29

Да, работает как надо. Идите вперед и опубликуйте это как ответ.

W. Hoffman 11.04.2019 14:14
0
4
813
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта проблема должна реализовать WebViewClient с переопределением shouldInterceptRequest, как в этой теме. Kitkat убивает: не разрешено загружать локальный ресурс: file:///android_asset/webkit/android-weberror.png

Фрагмент кода для Xamarin.Android, переопределяющий CSS: public override WebResourceResponse ShouldInterceptRequest(WebView view, string url) { WebResourceResponse response = base.ShouldInterceptRequest(view, url); if (url != null && url.Contains(INJECTION_TOKEN)) { string AssetPath = "newsOverride.css"; response = new WebResourceResponse("text/css", "UTF-8", context.Assets.Open(AssetPath)); } return response; }

W. Hoffman 12.04.2019 14:13

Другие вопросы по теме