webview不加载JS文件/库swift-TradingView

时间:2019-01-07 08:19:41

标签: javascript swift wkwebview javascriptcore tradingview-api

我一直在尝试使用UIwebview动态加载JS文件/库(交易视图)。我已成功将JS文件放入.html文件中,但是在webview加载.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)中,则会执行“ if”条件,并且一切正常,但无法动态传递html文件中的任何内容。

然后我尝试将html字符串放入loadHTMLString和baseURL(nil)中,它现在不加载JS库。仅内联JS有效。 我经历过很多stackoverflow解决方案,并且用Google搜索了很多东西,但根本无法加载JS文件。 另外,我将baseURL设置为@“ http”也没有成功。

我通过调试发现,当我使用loadRequest时,swift使用了“ file:///”,但是当我使用“ webView.loadHTMLString”时,它切换为“ applewebdata://”,而这是“ applewebdata”不允许网络视图加载JS文件。

P.S:用选定的代码(即ETH / USD)加载TradingView,该代码可用快速代码显示。

谢谢。

0 个答案:

没有答案