Сбой инициализации WKUserScript на iOS 14: использование нереализованного инициализатора init(source:injectionTime:forMainFrameOnly:in:)
Сбой при выполнении этого метода инициализации в ios 14
Использование нереализованного инициализатора init(source:injectionTime:forMainFrameOnly:in:)
класс MyScript: WKUserScript {
init(source: String) {
super.init(source: source,
injectionTime: .atDocumentEnd,
forMainFrameOnly: true)
}
}
let source = "var style = document.createElement('style');\nstyle.type = 'text/css'\nstyle.innerHTML = '/** * Style.css * FolioReaderKit * * Создано Хеберти Алмейда 06/15 мая. * Copyright (c) Folio Reader, 2015. Все права защищены. // Сброс CSS /html, body, div, span, applet, object, iframe,h1, h2, h3, h4, h5, h6, p, blockquote, pre,a, abbr, acronym, address, big, cite, code,del, dfn, em, img, ins, kbd, q, s, samp,small, strike, strong, sub, sup, tt, var,b, u, i, center,dl, dt, dd, li,fieldset, form, label, legend,table, caption, tbody, tfoot, thead, tr, th, td,article, aside, canvas, details, embed, рисунок, figcaption, нижний колонтитул, заголовок, hgroup, меню, навигация, вывод, ruby, раздел, сводка, время, отметка, аудио, видео { margin: 0; vertical-align: baseline;}/Сброс роли отображения HTML5 для старых браузеров никто; / Никогда не изменять размер текста / padding: 0 0 !important; переполнение: скрыто;}тело { padding: 40px 20px !important; переполнение: скрытый !важный;} { разрыв страницы до: начальный !важный; /* Сбросить разрывы страниц по умолчанию /}/ Пользовательское заполнение для планшетов /@media only screen and (min-device-width: 768px){ body { padding: 60px 80px !important; }}/ Таблица/ таблица { граница коллапса: коллапс; интервал между границами: 0; word-break: normal;}tbody, tfoot, thead { vertical-align: middle !important;}td, th, tr { vertical-align: inherit !important;}/ List /dd, dir, menu, ol, ul { поле слева: 30px !важно; } ol { тип-стиля-списка: десятичный !важно; }li { display: list-item !important; }ол ол, ол ул, ул ол, ул ул { margin-bottom: 0 !важно; margin-top: 0 !important;}/ Links /a { -webkit-touch-callout: none; } / Отключить обратный вызов ссылки / { -webkit-user-select: text; } img { -webkit-user-select: none; }p { поле: 1.3em 0 1.5em 0; высота строки: 1.40em !важно; text-indent: 1.25em;}b, strong, th {начертание шрифта: жирнее !important;}/* Принудительное переопределение шрифта/code, kbd, pre, samp, tt { семейство шрифтов: моноширинный, моноширинный! Важно; размер шрифта: 1em;}кнопка, ввод, выбор, текстовая область { дисплей: встроенный блок !важно; }/ h1, h2, h3, h4, h5, h6 { вес шрифта: 400! важно; }/del, s, strike { text-decoration: line-through!important; } hr { background-color: rgba(0,0,0,.1) !important; граница: нет !важно; высота: 1px !important;}/ Sub и Super /big { размер шрифта: 1.15em !important; } маленький, суб, суп {размер шрифта: .65em !важно; }sub { вертикальное выравнивание: sub !important; } sup { семейство шрифтов: моноширинный! важно; вертикальное выравнивание: супер !важно;}/ iBooks нравится/a { украшение текста: нет; } pre { пробел: предварительная обертка; }@page { поле: 0 0 !важно; } table, ol, il { text-align: -webkit-auto; } h1, h2, h3, h4, h5, h6 { выравнивание текста: -webkit-auto; рендеринг текста: оптимизируем разборчивость;}/ разрешить разрыв слов в заголовках и якорях, поскольку они имеют тенденцию быть большего размера шрифта или содержать более длинные слова /a, h1, h2, h3, h4, h5, h6 { word-break: break-word !важный; -webkit-дефисы: нет !важно; дефисы: нет !important;}/ Начало Теда /img, svg, audio, video { max-height: 95% !important; максимальная ширина: 100% !важно; box-sizing: граница-коробка; подходит для объекта: содержит; page-break-inside: Avoid;}/ End Ted // Разделы Div также используются для изменения размера изображений, поэтому убедитесь, что авторы получили то, что задумали //для того, чтобы изображения в них были полностью видны на экране /div { max-width: 100%; }aside[epub|type~="footnote"] { display: none !important; } ruby > rt, ruby > rp { -webkit-user-select: none; } { -webkit-font-smoothing: субпиксельное сглаживание }/* * * Классы подсветки * /highlight { -webkit-touch-callout: none; -webkit-user-select: none;}/ Удалить выделение нажатием /input, textarea, button, highlight, select, a { -webkit-tap-highlight-color: rgba(0,0,0,0);}/ Highlight стили/html .highlight-yellow {фон: rgb (255, 235, 107)} html .highlight-green {фон: #C0ED72}html .highlight-blue {фон: #ADD8FF}html .highlight-pink {фон: #FFB0CA } html .highlight-underline { text-decoration: none; нижняя граница: 2px сплошная #F02814;}html .highlight-yellow, html .highlight-green, html .highlight-blue, html .highlight-pink, span.epub-media-overlay-playing { border-radius: 3px; отступ: 0 2px; margin: 0-2px;}/ стиль наложения мультимедиа по умолчанию /.mediaOverlayStyle0 span.epub-media-overlay-playing { background: #ccc}.mediaOverlayStyle1 .epub-media-overlay-playing { border-bottom: dotted 2px Transparent; border-radius: 0;}/ * * Ночной режим */html, body { -webkit-transition: все 0.6s easy;}html { background-color: #FFFFFF !important;}body { background-color: Transparent !important;}html.nightMode, html.nightMode body { background-color: #131313 !important;}.nightMode p, .nightMode div, .nightMode span:not(.epub-media-overlay-playing) { color: #767676 !important; цвет фона: прозрачный! важно;}. nightMode h1, .nightMode h2, .nightMode h3, .nightMode h4, .nightMode h5, . : rgba (255, 235, 107, 0,9)} html.nightMode .highlight-green {фон: rgba (192, 237, 114, 0,9)} html.nightMode .highlight-blue {фон: rgba (173, 216, 255) , 0,9)} html.nightMode .highlight-pink {фон: rgba (255, 176, 202, 0,9)} html.nightMode .highlight-underline {граница-нижняя: 2px сплошная rgba (240, 40, 20, 0,6)} /* * Классы шрифтов * */.andada, .andada p, .andada span, .andada div { семейство шрифтов: "Andada", sans-serif !important; }.lato, .lato p, .lato span, .lato div { семейство шрифтов: "Lato", serif !important; }.lora, .lora p, .lora span, .lora div { семейство шрифтов: "Lora", serif !important; } .raleway, .raleway p, .raleway span, .raleway div { семейство шрифтов: "Raleway", без засечек !важно; } html.textSizeOne, .textSizeOne body { размер шрифта: 13px !важно; } html.textSizeTwo, .textSizeTwo body { размер шрифта: 15px !важно; } html.textSizeThree, .textSizeThree body { размер шрифта: 17px !важно; } html.textSizeFour, .textSizeFour body { размер шрифта: 19px !важно; } html.textSizeFive, .textSizeFive body { размер шрифта: 21px !важно; }h1 {размер шрифта: 2em; высота строки: 1.2;}h2 {размер шрифта: 1.5em; высота строки: 1.2;}h3 {размер шрифта: 1.17эм; высота строки: 1.2;}h4 {размер шрифта: 1em; высота строки: 1,2;}h5 {размер шрифта: 0,83 em; высота строки: 1,2;}h6 {размер шрифта: 0,67 em; line-height: 1.2;}body { word-break: break-word !important; -webkit-дефисы: авто !важно; дефисы: авто !важно;}p, span, div {размер шрифта: 1em; line-height: 1.5 !important;}@media только экран и (min-device-width: 600px) { div { font-size: 1em; высота строки: 1.438em !важно; } тело { -webkit-дефисы: нет !важно; дефисы: нет !важно; }}';\ndocument.head.appendChild(стиль);" }@media только экран и (min-device-width: 600px) { div { font-size: 1em; высота строки: 1.438em !важно; } тело { -webkit-дефисы: нет !важно; дефисы: нет !важно; }}';\ndocument.head.appendChild(стиль);" }@media только экран и (min-device-width: 600px) { div { font-size: 1em; высота строки: 1.438em !важно; } тело { -webkit-дефисы: нет !важно; дефисы: нет !важно; }}';\ndocument.head.appendChild(стиль);"
1 ответ
Проблема с инициализацией WKUserScript на iOS 14 и более поздних версиях.
Например:
- Если у вас есть сложная логика сценариев для соединения вашего веб-контента с вашим приложением, но ваш веб-контент также имеет собственные сложные библиотеки сценариев, вы избежите возможных конфликтов, используя клиент WKContentWorld.
- Если вы пишете веб-браузер общего назначения, поддерживающий расширения JavaScript, вы должны использовать отдельный клиент WKContentWorld для каждого расширения.
Поскольку объект WKContentWorld является пространством имен, он сам не содержит никаких данных. Например:
- Если вы сохраняете переменную в JavaScript в области действия определенного WKContentWorld при просмотре определенного документа веб-страницы, после перехода к новому документу эта переменная исчезнет.
- Если вы сохраните переменную в JavaScript в области действия определенного WKContentWorld в одном WKWebView, эта переменная не будет существовать в том же мире в другом WKWebView.
Slove после добавления этой строки
класс MyScript: WKUserScript {
init(source: String) {
if #available(iOS 14.0, *) {
super.init(source: source, injectionTime: .atDocumentEnd, forMainFrameOnly: true, in: .defaultClient)
} else {
// Fallback on earlier versions
super.init(source: source,
injectionTime: .atDocumentEnd,
forMainFrameOnly: true)
}
}
}