Я очень старался динамически загружать файлы / библиотеки JS (режим торговли) с помощью UIwebview. Мне удалось поместить файлы JS в файл .html, но я не могу передать переменную до того, как веб-просмотр загрузит файл .html. Некоторые фрагменты моего кода:
<!DOCTYPE html>
<html>
<head>
<title>TradingView Charting Library demo </title>
<!-- Fix for iOS Safari zooming bug -->
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<script type="text/javascript" src="charting_library/charting_library.min.js"></script>
<script type="text/javascript" src="datafeeds/udf/dist/polyfills.js"></script>
<script type="text/javascript" src="datafeeds/udf/dist/bundle.js"></script>
<script type="text/javascript" src="interface_js.js" one='BTC_EUR'></script>
<script>
var widget;
function setSymbol(symbol) {
console.log(symbol)
widget.chart().setSymbol("ADA_BTC");
}
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
TradingView.onready(function() {
widget = new TradingView.widget({
fullscreen: true,
symbol: 'BTC_EUR',
interval: 'D',
container_id: "tv_chart_container",
// BEWARE: no trailing slash is expected in feed URL
datafeed: new Datafeeds.UDFCompatibleDatafeed("http://example.com"),
library_path: "charting_library/",
locale: getParameterByName('lang') || "en",
disabled_features: ["use_localstorage_for_settings"],
preset: "mobile"
});
})
</script>
</head>
<body style="margin:0px;">
<div id="tv_chart_container"></div>
</body>
быстрый фрагмент:
if let url = Bundle.main.url(forResource: "mobile_white1", withExtension:"html") {
let request = NSURLRequest(url: url)
self.webView.loadRequest(request as URLRequest)
self.webView.stringByEvaluatingJavaScript(from: "setSymbol(\(selectedPair.uppercased()))")
}
else { self.html = "<html><head><title>TradingView Charting Library demo</title><meta name='viewport' content='width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0'><meta http-equiv='X-UA-Compatible' content='IE=Edge'></head><body style='margin:0px;'><script type='text/javascript' src='charting_library/charting_library.min.js'></script><script type='text/javascript' src='datafeeds/udf/dist/polyfills.js'></script><script type='text/javascript' src='datafeeds/udf/dist/bundle.js'></script><script type='text/javascript' src='interface_js.js' one='BTC_EUR'></script><div id='tv_chart_container'></div></body></html>"
webView.loadHTMLString(self.html, baseURL: nil)
}
фрагмент intercept.js:
var widget;
var selectedSymbol = document.currentScript.getAttribute('one');
TradingView.onready(() => {
widget = new TradingView.widget({
fullscreen: true,
symbol: selectedSymbol,
interval: 'D',
debug: true,
container_id: "tv_chart_container",
datafeed: new Datafeeds.UDFCompatibleDatafeed("http://example.com"),
library_path: "charting_library/",
locale: "en",
disabled_features: ["use_localstorage_for_settings"],
overrides: {
'mainSeriesProperties.style': 3
}
});
})
Если я поставлю mobile_white
в forResource(swift)
, выполняется условие «если», и все работает хорошо, но динамически ничего не может передать в html-файл.
Затем я попытался поместить строку html в loadHTMLString и baseURL (nil), сейчас библиотеки JS не загружаются. Работает только встроенный JS.
Я прошел через множество решений для работы со стеком и погуглил много вещей, но не смог загрузить файлы JS вообще.
Также я установил baseURL как @ "http" безуспешно.
То, что я обнаружил при отладке, что swift использует «file: ///», когда я использую loadRequest, но он переключается на «applewebdata: //», когда я использовал «webView.loadHTMLString», и эта вещь «applewebdata» не позволяет webview загружать файлы JS.
P.S: загрузить TradingView с выбранным символом (т.е. ETH / USD), который доступен в быстром коде.
Спасибо.