2015-06-16 17 views
5

Tôi đang cố gắng sử dụng điều khiển trình duyệt CefSharp tại ứng dụng WinForms cùng với cơ chế LocalStorage.
Vấn đề là kiểm soát trình duyệt trong ứng dụng thay đổi thành LocalStorage không ảnh hưởng đến các cửa sổ trình duyệt khác và nó không nhận được thay đổi từ các cửa sổ trình duyệt chrome khác.
HTML hoạt động bên trong trình duyệt chrome gốc và thay đổi localstorage và nhận thông báo thay đổi.
Tôi bỏ lỡ điều gì?Trình duyệt WinForms CefSharp LocalStorage không hoạt động

C# Code:

public Form1() 
    { 
     InitializeComponent(); 

     CefSharp.Cef.Initialize(); 

     _browser = new ChromiumWebBrowser(URL_TO_LOAD); 
     _browser.BrowserSettings = new CefSharp.BrowserSettings() 
     { 
      ApplicationCacheDisabled = false, 
      FileAccessFromFileUrlsAllowed = true, 
      JavascriptDisabled = false, 
      LocalStorageDisabled = false, 
      WebSecurityDisabled = true, 
      JavaScriptOpenWindowsDisabled = false, 
      JavascriptDomPasteDisabled = false 
     }; 
     _browser.Load(URL_TO_LOAD); 

     splitContainer1.Panel1.Controls.Add(_browser); 
    } 

HTML:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
     <meta charset="utf-8"/> 
     <meta name="viewport" content="width=620"/> 
     <title>HTML5 Demo: Storage Events</title> 
</head> 
<body> 
    <div> 
     <p> 
      <label for="data">Your test data:</label> <input type="text" 
       name="data" value="" placeholder="change me" id="data" /> 
     </p> 
     <p id="fromEvent">Waiting for data via<code>storage</code>event... 
     </p> 
    </div> 
    <SCRIPT type="text/javascript"> 
    var addEvent = (function() { 
      if (document.addEventListener) { 
      return function (el, type, fn) { 
       if (el && el.nodeName || el === window) { 
       el.addEventListener(type, fn, false); 
       } else if (el && el.length) { 
       for (var i = 0; i < el.length; i++) { 
        addEvent(el[i], type, fn); 
       } 
       } 
      }; 
      } else { 
      return function (el, type, fn) { 
       if (el && el.nodeName || el === window) { 
       el.attachEvent('on' + type, function() { return fn.call(el, window.event); }); 
       } else if (el && el.length) { 
       for (var i = 0; i < el.length; i++) { 
        addEvent(el[i], type, fn); 
       } 
       } 
      }; 
      } 
     })(); 
    </SCRIPT> 
    <script> 
     alert("localStorage: " + localStorage); 

     var dataInput = document.getElementById('data'), output = document 
       .getElementById('fromEvent'); 
     addEvent(window, 'storage', function(event) { 
      alert('change notification'); 
      if (event.key == 'storage-event-test') { 
       output.innerHTML = event.newValue; 
      } 
     }); 
     addEvent(dataInput, 'keyup', function() { 
      localStorage.setItem('storage-event-test', this.value); 
     }); 

     var curStorageVal = localStorage.getItem('storage-event-test'); 
     if(curStorageVal != null && curStorageVal != '') 
     { 
      output.innerHTML = curStorageVal; 
     } 
    </script> 


</body> 
</html> 

Trả lời

2

Trừ khi bạn thiết lập một đường dẫn cho các vị trí bộ nhớ cache trong một đối tượng CefSharp.CefSettings và vượt qua nó với phương pháp Cef.Initialize(), mỗi khi ứng dụng của bạn được bắt đầu, (các) trình duyệt sẽ tạo một phiên bản bộ nhớ cache mới, sẽ được loại bỏ khi ứng dụng của bạn thoát.

Các ví dụ bộ nhớ cache cũng giữ localStorage dữ liệu của bạn, cũng như bất kỳ cookie (bạn có thể muốn giữ một người dùng đăng nhập?) và những thứ khác nữa.

tôi đã cùng một vấn đề, nhưng không tìm thấy một giải pháp ở đây: https://github.com/cefsharp/CefSharp/blob/v39.0.2/CefSharp.Example/CefExample.cs#L30-L32

Giải pháp tối thiểu chỉ đơn giản là để thêm video này thủ tục khởi động ứng dụng của bạn, giống như trong Program.Main của bạn hoặc trong trường hợp của bạn, constructor Form1 lớp của bạn:

var settings = new CefSharp.CefSettings 
{ 
    CachePath = "cache" 
}; 

CefSharp.Cef.Initialize(settings); 
Các vấn đề liên quan