2017-04-07 15 views
0

私は、ハイブリッドWebViewを使用してxamarinフォームIOSアプリケーションがhtmlページ、スタイル、およびスクリプトを呼び出す際に取り組んでいます。私はスタイルとスクリプトをレンダリングすることはできませんよと私のコードはXamarinフォーム - IOS、スクリプト、およびスタイルが呼び出されていない

HybridWebViewRenderer.cs

protected override void OnElementChanged (ElementChangedEventArgs<HybridWebView> e) 
    { 
     base.OnElementChanged (e); 

     if (Control == null) { 
      userController = new WKUserContentController(); 
      var script = new WKUserScript (new NSString (JavaScriptFunction), WKUserScriptInjectionTime.AtDocumentEnd, false); 
      userController.AddUserScript (script); 
      userController.AddScriptMessageHandler (this, "invokeAction"); 

      var config = new WKWebViewConfiguration { UserContentController = userController }; 
      var webView = new WKWebView (Frame, config); 
      SetNativeControl (webView); 
     } 

     if (e.OldElement != null) { 
      userController.RemoveAllUserScripts(); 
      userController.RemoveScriptMessageHandler ("invokeAction"); 
      var hybridWebView = e.OldElement as HybridWebView; 
      hybridWebView.Cleanup(); 
     } 

     if (e.NewElement != null) { 
      string fileName = Path.Combine (NSBundle.MainBundle.BundlePath, string.Format ("Content/{0}", Element.Uri)); 

      //fileName = "/var/containers/Bundle/Application/2DC89563-D118-4092-B7A5-4549AF07F3B2/StoneApplication.iOS.app/Content/index.html" 

      Control.LoadRequest (new NSUrlRequest (new NSUrl (fileName, false))); 
     } 
    } 

    public void DidReceiveScriptMessage (WKUserContentController userContentController, WKScriptMessage message) 
    { 
     Element.InvokeAction (message.Body.ToString()); 
    } 

と私のindex.htmlで、ここで私は、スクリプト、画像、スタイル

<html> 
<head> 
<title>STONEAPP TEMPLATE</title> 
<!--Scripts--> 
<script src="/Scripts/angular.min.js"></script> 
<script src="/Scripts/jquery.min.js"></script> 
<script src="/Scripts/bootstrap.js"></script> 
<script src="/Scripts/fileServer.js"></script> 
<script src="/Scripts/fileupload.js"></script> 
<script src="/Scripts/ng-cordova.js"></script> 
<script src="/Scripts/app.js"></script> 

<!--Styles--> 
<link href="/Styles/bootstrap.css" rel="stylesheet"/> 
<link href="/Styles/main.css" rel="stylesheet"/> 
</head> 
<body ng-app="stoneApp" style="background-color: #ffffff;"> 
<div ng-controller="templateCtrl"> 
    <div id="Header" style="background-color:#293846;min-height:50px"> 
     <table style="width:100%;padding-top:5px;padding-left:5px;padding-right:5px"> 
      <tr> 
       <td align="center" width="5%" valign="middle" ng-if="jobView == true" ng-click="showActList()"> 
        <img src="/Images/arrow-back.png" alt="" style="height:50px;width:50px"/> 
       </td> 
       <td align="center" width="5%" valign="middle"> 
        <img src="/Images/wifi_on.png" alt="" style="height:50px;width:50px" ng-click="ShowWifiSettings()"/> 
       </td> 
       <td align="center" width="5%" valign="middle" ng-click="ShowTabSettings()"> 
        <img src="/Images/settings.png" alt="" style="height:50px;width:50px" ng-if="loginView == false"/> 
       </td> 
       <td width="5%" valign="middle" ng-if="activityView == true"></td> 
       <td width="60%" valign="middle"></td> 
       <td width="20%" valign="middle" align="right"> 
        <span style="color:white" ng-if="loginView == false">{{userName}} !</span> 
       </td> 
       <td width="5%" align="right" valign="middle" ng-click="logout()" > 
        <img src="/Images/power_button.png" style="height:50px;width:50px" ng-if="loginView == false"/> 
       </td> 
      </tr> 
     </table> 
    </div> 
    </div> 
    </body> 

私を呼び出していますスタイルとスクリプトを呼び出すことができなくても、スタイルとスクリプトのバンドルリソースとしてビルドアクションを与えました。プログラム構造は添付されたイメージです。

enter image description here

私は、IOS 10.2タブレットを使用しています。ですから、私の問題を調べて、スクリプトのスタイルや画像をhtmlページのリンクとして呼び出せるようにしてください。前もって感謝します。あなたはControl.LoadRequest

であなたが問題だということはできません

答えて

0

は、あなたがこの方法なし、他の方法あなたがそれを定義してみましょうとあなたのWebViewのためのbaseUrlに定義することができないということです。 index.htmlがwebviewにロードされると、webviewはbaseUrlが定義されておらず、それらをロードする場所がわからないため、スクリプトまたはCSSを取得できません。

回避策はhtmlContentはvarとbaseUrlにNSUrl baseurl = new NSUrl(NSBundle.MainBundle.BundlePath, true);

+0

こんにちは@Lezeにロードされ、あなたのindex.htmlの内容である私は、このように追加しますが、運スクリプト/ CSS /画像はありませんんLoadHtmlString (String htmlContent, NSUrl baseUrl)

を使用することです読み込み文字列htmlPath = Path.Combine(NSBundle.MainBundle.BundlePath、string.Format( "Content/{0}"、Element.Uri)); 文字列htmlContents = File.ReadAllText(htmlPath); Control.LoadHtmlString(htmlContents、null); –

+0

LoadHtmlStringにbaseUrlパラメータがありません。このようにしてみてください。string htmlPath = Path.Combine(NSBundle.MainBundle.BundlePath、string.Format( "Content/{0}"、Element.Uri)); NSUrlベースルール=新しいNSUrl(NSBundle.MainBundle.BundlePath、true);文字列htmlContents = File.ReadAllText(htmlPath); Control.LoadHtmlString(htmlContents、baseurl); ' – Leze

関連する問題