Медленная оценка JavaScript на Flutter Webview (iOS)Javascript

Форум по Javascript
Ответить
Anonymous
 Медленная оценка JavaScript на Flutter Webview (iOS)

Сообщение Anonymous »

Я пытаюсь запустить команду Javascript, чтобы получить HTML из Flutter WebView.

Код: Выделить всё

document.documentElement.outerHTML
< /code>
Пакеты попробовали: < /p>
[list]
[*]webview_flutter
[*]flutter_inappwebview
[/list]
проблема : запуск вышеуказанного JavaScript отстает от пользовательского интерфейса. Для JavaScript требуется около 15-20 секунд, чтобы вернуть свой результат. В то же время XCODE показывает> 100% использование ЦП. Я точно не понимаю, почему?!
Веб-страница, используемая в веб-просмотре, https://en.wikipedia.org/wiki/hello_(adele_song)образно PrettyPrint-Override "> class HtmlPreviewView extends StatelessWidget {

const HtmlPreviewView({super.key});

@override
Widget build(BuildContext context) {

final wv = WebViewController();

Future.delayed(const Duration(seconds: 5), () {
wv.runJavaScriptReturningResult('''document.documentElement.outerHTML.toString()''').then((result) {
print(result.toString());
});
});

WebViewWidget(
controller: wv
..setJavaScriptMode(JavaScriptMode.unrestricted)
..loadRequest(
WebUri('https://en.wikipedia.org/wiki/Hello_(Adele_song)'),
),
);
}
}

код для воспроизведения проблемы с Flutter_inappwebview :

class HtmlPreviewView extends StatelessWidget {

const HtmlPreviewView({super.key});

/// JavaScript code to get the HTML content of the page
String get getHtmlContentScript => '''
(function() {
const htmlContent = document.documentElement.outerHTML;
window.flutter_inappwebview.callHandler('onHtmlContent', htmlContent);
})();
''';

@override
Widget build(BuildContext context) {

return InAppWebView(
initialUrlRequest: 'https://en.wikipedia.org/wiki/Hello_(Adele_song)',
initialSettings: InAppWebViewSettings(
javaScriptEnabled: true,
isInspectable: true,
),
initialUserScripts: UnmodifiableListView([
UserScript(
source: linkLongPressScript,
injectionTime: UserScriptInjectionTime.AT_DOCUMENT_END,
),
]),
onWebViewCreated: (controller) {
state.setWebViewController(controller);

controller.addJavaScriptHandler(
handlerName: 'onHtmlContent',
callback: (args) {
String htmlContent = args[0];
print(htmlContent);
},
);
}
);
}
}
< /code>
Код для воспроизведения идеальной производительности IOS: < /p>
import SwiftUI
import WebKit

struct ContentView: View {
var body: some View {
WebView(urlString: "https://en.wikipedia.org/wiki/Hello_(Adele_song)")
.edgesIgnoringSafeArea(.all)
}
}

struct WebView: UIViewRepresentable {
let urlString: String

func makeUIView(context: Context) -> WKWebView {
let webView = WKWebView()
webView.navigationDelegate = context.coordinator
if let url = URL(string: urlString) {
webView.load(URLRequest(url: url))
}
return webView
}

func updateUIView(_ uiView: WKWebView, context: Context) {}

func makeCoordinator() -> Coordinator {
Coordinator()
}

class Coordinator: NSObject, WKNavigationDelegate {
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
webView.evaluateJavaScript("document.documentElement.outerHTML.toString()") { (html, error) in
if let htmlString = html as? String {
print("HTML Source Code:\n\(htmlString)")
} else if let error = error {
print("Error fetching HTML: \(error.localizedDescription)")
}
}
}
}
}

#Preview {
ContentView()
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... ebview-ios
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»