2017-07-10 8 views
0

私はWKWebViewでハイチャートを実装しようとしています。私は、html全体からチャート要素を分離することに成功しました。問題は今、チャートは機能を失っている。それでも、ページ全体を読み込む方法はありますか?グラフ要素のみを表示する方法はありますか?HTML要素を非表示にすることはできますか?

Here'sコード:サイトへ

import Cocoa 
import WebKit 

class ViewController: NSViewController { 

    var webView = WKWebView() 

    private var userContentController: WKUserContentController! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let userContentController = WKUserContentController() 
     let configuration = WKWebViewConfiguration() 
     configuration.userContentController = userContentController 
     let webView = WKWebView(frame: view.bounds, configuration: configuration) 
     view.addSubview(webView) 
     self.webView = webView 

     userContentController.removeAllUserScripts() 

     // Is there a possibility to just hide all Elements except 'document.body.innerHTML'? 
     // So the highchart will keep it´s functionality 

     let script = 
      "var selectedElement = document.querySelector('.panel-body');" + 
     "document.body.innerHTML = selectedElement.innerHTML;" 


     let userScript = WKUserScript(source: script, 
             injectionTime: WKUserScriptInjectionTime.atDocumentEnd, 
             forMainFrameOnly: true) 

     userContentController.addUserScript(userScript) 

     let url = NSURL(string: "https://www.worldweatheronline.com/v2/weather-averages.aspx?locid=194044&root_id=192045&wc=local_weather&map=~/brussels-weather-averages/be.aspx")! 
     webView.load(NSURLRequest(url: url as URL) as URLRequest) 

    } 
} 

リンク:https://www.worldweatheronline.com/v2/weather-averages.aspx?locid=194044&root_id=192045&wc=local_weather&map=~/brussels-weather-averages/be.aspx

- 私の日のために今これをしようとは、いくつかの助けを得ることは非常に喜んでいるだろう。

答えて

2

チャートを含むDOMオブジェクトへの参照を格納する場合、ボディのinnerHtmlをクリアしてからチャートを追加できるはずです。これにより、すべてのイベントリスナーとチャート機能が維持されます。また

var chartDiv = document.querySelector('.panel-body'); 
document.body.innerHTML = ''; 
document.body.append(chartDiv); 

を、ページ上のすべてのトップレベル要素を隠し、その後、身体にグラフを追加することもできます:ここで

あなたが注入できるjavascriptのだ

var chartDiv = document.querySelectorAll('.panel-body')[1]; 
document.querySelectorAll('body > *').forEach(function(el) { 
    el.style.display = 'none'; 
}); 
document.body.append(chartDiv); 
+0

これは非常に合理的な解決策のようです。私はちょうど試みました: 'let script = " var chartDiv = document.querySelector( '。panel-body') "+ " document.body.innerHTML = '' "+ " document.body.append(chartDiv); "しかし、今はページ全体を見せている。私は何かを監督しましたか? –

+0

@JoschHazard Chrome開発ツールのページでこのjsを実行したところ、グラフのみが表示されたページが表示されました。挿入されたスクリプトが実行される前に、完全に読み込まれるように、ページ上でスクリプトの挿入を遅延させる(または読み込み完了を検出するためにWKWebView機能を使用する)必要があるかもしれません。 – JeremyPlease

+0

@ JeremyPLease:確かにこれをチェックします。 –

0

あなたが許可されていますあなたのページでスクリプトを実行するには?その場合は、ページにjqueryとスクリプトセクションを挿入してから、hide()関数を直接使用できます。

<script src="jquery-3.2.1.min.js"></script> 
<script> 
    $(document).ready(function(){ 
     $('#element_id_to_be_hidden').hide(); 
    }); 
</script> 
+0

@ leobelones:「私の」ページでスクリプトを実行することが許可されているとはどういう意味ですか?これは私のページではありません。 –

+0

@JoschHazardだから、私はそれに尋ねた。私はそれがあなたの会社のページだと思っていましたが、一部の企業では官僚制がなくてもスクリプトを追加することはできません。とにかく、もし私が言ったようにしてやることができれば、それはうまくいくはずです。 – leobelones

関連する問題