2011-07-28 7 views
1

私は以下の完全なコードを投稿しています。webbrowserスタイルシートをリフレッシュしない

状況: 私はDOMDOCUMENT を指してIHTMLDocument2のcurrentDocを作成し、私は私がcurrentDoc

プログラムは私に正しいCSSのものが100%を含むHTMLコードを示して閉じ、適切な文字列 を書きます。作品

は、今私は、CSSを変更したい私は3列 (単に幅変更:幅48%:33%)に設定してください代わりに2列で

をして、新しい33でコードを再実行します% 今や突然CSSスタイルは適用されません。

私はプログラムを終了し、再度33%にCSSを変更

が、それは完全なウェブブラウザを設けることなく、何とか、だから、完璧な

の作品、私はCSSに2回目を読み込むことができません。.. 最初のCSSはいくつかのキャッシュのどこかにあり、2番目のCSSと競合しています。ちょうどここに詰まっています。これを解決する方法について本当に助けが必要です

私はこれを投稿する必要があるほど長くインターネットとstackoverflowを検索しましたこの惑星の他の誰かがすでにどこかに投稿したとしても、私はそれを見つけられませんでした。

private void doWebBrowserPreview() 
    { 
     if (lMediaFiles.Count == 0) 
     { 
      return; 
     } 

     Int32 iIndex = 0; 
     for (iIndex = 0; iIndex < lMediaFiles.Count; iIndex++) 
     { 
      if (!lMediaFiles[iIndex].isCorrupt()) 
      { 
       break; 
      } 
     } 

     String strPreview = String.Empty; 
     String strLine = String.Empty; 

     // Set example Media 
     String strLinkHTM = lMediaFiles[iIndex].getFilePath(); 
     FileInfo movFile = new FileInfo(strLinkHTM + lMediaFiles[iIndex].getFileMOV()); 
     String str_sizeMB = (movFile.Length/1048576).ToString(); 
     if (str_sizeMB.Length > 3) 
     { 
      str_sizeMB.Insert(str_sizeMB.Length - 3, "."); 
     } 

     //Get info about our media files 
     MediaInfo MI = new MediaInfo(); 
     MI.Open(strLinkHTM + lMediaFiles[iIndex].getFileM4V()); 
     String str_m4vDuration = // MI.Get(0, 0, 80); 
     MI.Get(StreamKind.Video, 0, 74); 
     str_m4vDuration = "Duration: " + str_m4vDuration.Substring(0, 8) + " - Hours:Minutes:Seconds"; 
     String str_m4vHeightPixel = MI.Get(StreamKind.Video, 0, "Height"); // "Height (Pixel): " + 
     Int32 i_32m4vHeightPixel; 
     Int32.TryParse(str_m4vHeightPixel, out i_32m4vHeightPixel); 
     i_32m4vHeightPixel += 16; // for the quicktime embed menu 
     str_m4vHeightPixel = i_32m4vHeightPixel.ToString(); 
     String str_m4vWidthPixel = MI.Get(StreamKind.Video, 0, "Width"); //"Width (Pixel): " + 

     foreach (XElement xmlLine in s.getTemplates().getMovieHTM().Element("files").Elements("file")) 
     { 
      var query = xmlLine.Attributes("type"); 
      foreach (XAttribute result in query) 
      { 
       if (result.Value == "htm_header") 
       { 
        foreach (XElement xmlLineDes in xmlLine.Descendants()) 
        { 
         if (xmlLineDes.Name == "dataline") 
         { 
          strLine = xmlLineDes.Value; 
          strLine = strLine.Replace(@"%date%", lMediaFiles[iIndex].getDay().ToString() + " " + lMediaFiles[iIndex].getMonth(lMediaFiles[iIndex].getMonth()) + " " + lMediaFiles[iIndex].getYear().ToString()); 
          strPreview += strLine + "\n"; 
         } 
        } 
       } 
      } 
     } 

     strLine = "<style type=\"text/css\">" + "\n"; 
     foreach (XElement xmlLine in s.getTemplates().getLayoutCSS().Element("layoutCSS").Elements("layout")) 
     { 
      var query = xmlLine.Attributes("type"); 
      foreach (XAttribute result in query) 
      { 
       if (result.Value == "layoutMedia") 
       { 
        foreach (XElement xmlLineDes in xmlLine.Elements("layout")) 
        { 
         var queryL = xmlLineDes.Attributes("type"); 
         foreach (XAttribute resultL in queryL) 
         { 
          if (resultL.Value == "layoutVideoBox") 
          { 
           foreach (XElement xmlLineDesL in xmlLineDes.Descendants()) 
           { 
            if (xmlLineDesL.Name == "dataline") 
            { 
             strLine += xmlLineDesL.Value + "\n"; 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
     } 
     strLine += "</style>" + "\n"; 
     strPreview = strPreview.Insert(strPreview.LastIndexOf("</head>", StringComparison.Ordinal), strLine); 


     for (Int16 i16Loop = 0; i16Loop < 3; i16Loop++) 
     { 
      foreach (XElement xmlLine in s.getTemplates().getMovieHTM().Element("files").Elements("file")) 
      { 
       var query = xmlLine.Attributes("type"); 
       foreach (XAttribute result in query) 
       { 
        if (result.Value == "htm_videolist") 
        { 
         foreach (XElement xmlLineDes in xmlLine.Descendants()) 
         { 
          if (xmlLineDes.Name == "dataline") 
          { 
           strLine = xmlLineDes.Value; 
           strLine = strLine.Replace(@"%m4vfile%", strLinkHTM + lMediaFiles[iIndex].getFileM4V()); 
           strLine = strLine.Replace(@"%moviefile%", strLinkHTM + lMediaFiles[iIndex].getFileMOV()); 
           strLine = strLine.Replace(@"%height%", str_m4vHeightPixel); 
           strLine = strLine.Replace(@"%width%", str_m4vWidthPixel); 
           strLine = strLine.Replace(@"%duration%", str_m4vDuration); 
           strLine = strLine.Replace(@"%sizeMB%", str_sizeMB); 
           strLine = strLine.Replace(@"%date%", lMediaFiles[iIndex].getDay().ToString() + " " + lMediaFiles[iIndex].getMonth(lMediaFiles[iIndex].getMonth()) + " " + lMediaFiles[iIndex].getYear().ToString()); 
           strPreview += strLine + "\n"; 
          } 
         } 
        } 
       } 
      } 
     } 

     foreach (XElement xmlLine in s.getTemplates().getMovieHTM().Element("files").Elements("file")) 
     { 
      var query = xmlLine.Attributes("type"); 
      foreach (XAttribute result in query) 
      { 
       if (result.Value == "htm_footer") 
       { 
        foreach (XElement xmlLineDes in xmlLine.Descendants()) 
        { 
         if (xmlLineDes.Name == "dataline") 
         { 
          strPreview += xmlLineDes.Value + "\n"; 
         } 
        } 
       } 
      } 
     } 
     webBrowserPreview.Navigate("about:blank"); 
     webBrowserPreview.Document.OpenNew(false); 
     mshtml.IHTMLDocument2 currentDoc = (mshtml.IHTMLDocument2)webBrowserPreview.Document.DomDocument; 
     currentDoc.clear(); 
     currentDoc.write(strPreview); 
     currentDoc.close(); 

     /* 
     try 
     { 
      if (webBrowserPreview.Document != null) 
      { 
       IHTMLDocument2 currentDocument = (IHTMLDocument2)webBrowserPreview.Document.DomDocument; 
       int length = currentDocument.styleSheets.length; 

       IHTMLStyleSheet styleSheet = currentDocument.createStyleSheet(@"", 0); 
       //length = currentDocument.styleSheets.length; 
       //styleSheet.addRule("body", "background-color:blue"); 
       strLine = String.Empty; 
       foreach (XElement xmlLine in s.getTemplates().getLayoutCSS().Element("layoutCSS").Elements("layout")) 
       { 
        var query = xmlLine.Attributes("type"); 
        foreach (XAttribute result in query) 
        { 
         if (result.Value == "layoutMedia") 
         { 
          foreach (XElement xmlLineDes in xmlLine.Elements("layout")) 
          { 
           var queryL = xmlLineDes.Attributes("type"); 
           foreach (XAttribute resultL in queryL) 
           { 
            if (resultL.Value == "layoutVideoBox") 
            { 
             foreach (XElement xmlLineDesL in xmlLineDes.Descendants()) 
             { 
              if (xmlLineDesL.Name == "dataline") 
              { 
               strLine += xmlLineDesL.Value; 
              } 
             } 
            } 
           } 
          } 
         } 
        } 
       } 
       //TextReader reader = new StreamReader(Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "basic.css")); 
       //string style = reader.ReadToEnd(); 
       styleSheet.cssText = strLine; 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     }*/ 

     webBrowserPreview.Refresh(); 
    } 
+0

の破損を引き起こしていることを見つける多くの時間を失ったので、だから、それだけですあなたのCSSをキャッシュする?あなたは一生懸命リフレッシュしましたか? (CTRL + F5) – abney317

+0

はい。私はまた多くの異なった変種を試しました。ディスクへのファイルの保存やナビゲートを含む。何かの理由で、 "div#video_box"という名前のスタイルシートはセッション中に変更できません。たとえWebブラウザを独自のフォームにして、このフォームをC#で自動的に処理する必要がある場合にこのフォームを開いたり閉じたりしても、スタイルシートを変更することはできません。 CSSとHTMLの両方で名前を変更すると、変更されたデータが正しく読み込まれますが、変更するたびに新しい名前を付けなければなりません。私は列挙子を使用していくつかのバイパスソリューションを考え出すことができましたが、これはもちろん素晴らしいソリューションではありません。 – Vince

+0

http://www.eggheadcafe.com/software/aspnet/30119924/dynamic-stylesheet-problem.aspx私はこれも同様の問題の説明だと思います。 C#webbrowserの実装で奇妙なもののように思える – Vince

答えて

0

私は今、成功したと同じバグがあり 私のプロジェクトにバークリウム-シャープメソッドを実装! 解決策を見つけました!

最初に試行されなかった試み: 永続的なフォーム(メインフォーム)があり、その中にネストされたWebブラウザーがありました。 それはCSSでhtmlを変更した後、私はこの新しいhtmlに移動するように言った!

これはうまくいきませんでした: それから私は自分のフォームにウェブブラウザーを置こうとしました。私は単に開く/閉じる各 時間私はリフレッシュが必要です。ガベージコレクタがすべてをきれいにするようにする

私はBerkeliumを試して、私のニーズに書き換えました。 ウェブブラウザで2と同じロジックです。運もない。

私はFirefoxを開いて、この動作を実際のブラウザでエミュレートできるかどうかを確認しようとしました。確かに! firefoxを開いて強制的にファイルを開くと(単に新しいファイルを開くと、firefoxは実際には移動しませんが、すでに開いていて、単にそれを更新していることを検出します) 私はこれをページ! 1つのfirefoxセッションで同じファイルを2度開く(移動する)ように強制する小さなスクリプトでは、すべてのCSSが壊れていました!

なので、何らかの理由で同じファイルを2回ナビゲートしないでください。何かを閉じるのではなく、強制的に更新してください。この情報は他の人を助けることができない「移動」

希望、私はそれがよりその後、一度、同じファイルに「移動」スタイルシート

関連する問題