bool OnwkeLoadUrlBeginCallback(IntPtr webView, IntPtr param, string url, IntPtr job) { //mb://index.html/js/index.js if (url.StartsWith("mb://")) { Regex regex = new Regex(@"mb://", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace); string str = regex.Replace(url, ""); // url.TrimStart("mb://".ToArray());//.Substring(startIndex); //if (url != Url)//加载本地资源 //{ // str = url.TrimStart(Url.ToArray()); //} str = str.Replace('/', '.'); System.Reflection.Assembly Assemblys = BlinkBrowserPInvoke.ResourceAssemblys["MiniBlinkPinvokeDemo"]; if (Assemblys != null) { using (Stream sm = Assemblys.GetManifestResourceStream("MiniBlinkPinvokeDemo." + str)) { if (sm != null) { StreamReader m_stream = new StreamReader(sm, Encoding.Default); m_stream.BaseStream.Seek(0, SeekOrigin.Begin); string strLine = m_stream.ReadToEnd(); m_stream.Close(); string data = strLine; if (url.EndsWith(".css")) { BlinkBrowserPInvoke.wkeNetSetMIMEType(job, Marshal.StringToCoTaskMemAnsi("text/css")); } else if (url.EndsWith(".png")) { BlinkBrowserPInvoke.wkeNetSetMIMEType(job, Marshal.StringToCoTaskMemAnsi("image/png")); } else if (url.EndsWith(".gif")) { BlinkBrowserPInvoke.wkeNetSetMIMEType(job, Marshal.StringToCoTaskMemAnsi("image/gif")); } else if (url.EndsWith(".jpg")) { BlinkBrowserPInvoke.wkeNetSetMIMEType(job, Marshal.StringToCoTaskMemAnsi("image/jpg")); } else if (url.EndsWith(".js")) { BlinkBrowserPInvoke.wkeNetSetMIMEType(job, Marshal.StringToCoTaskMemAnsi("application/javascript")); } else { BlinkBrowserPInvoke.wkeNetSetMIMEType(job, Marshal.StringToCoTaskMemAnsi("text/html")); } //wkeNetSetURL(job, url); BlinkBrowserPInvoke.wkeNetSetData(job, Marshal.StringToCoTaskMemAnsi(data), Encoding.Default.GetBytes(data).Length); } else { ResNotFond(url, job); } } } else { ResNotFond(url, job); } return(true); } else { //如果需要 OnwkeLoadUrlEndCallback 回调,需要取消注释下面的 hook BlinkBrowserPInvoke.wkeNetHookRequest(job); } return(false); }
/// <summary> /// 这个方法里可HOOK所有资源。 /// </summary> /// <param name="webView"></param> /// <param name="param"></param> /// <param name="url"></param> /// <param name="job"></param> /// <returns></returns> bool OnwkeLoadUrlBeginCallback(IntPtr webView, IntPtr param, string url, IntPtr job) { //mb://index.html/js/index.js if (url.StartsWith("mb://")) { url = url.Split('?')[0]; Regex regex = new Regex(@"mb://", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace); string str = regex.Replace(url, ""); // url.TrimStart("mb://".ToArray());//.Substring(startIndex); //if (url != Url)//加载本地资源 //{ // str = url.TrimStart(Url.ToArray()); //} str = str.Replace('/', '.'); System.Reflection.Assembly Assemblys = BlinkBrowserPInvoke.ResourceAssemblys["WoWLauncher"]; if (Assemblys != null) { using (Stream sm = Assemblys.GetManifestResourceStream("WoWLauncher." + str)) { if (sm != null) { var bytes = StreamToBytes(sm); if (url.EndsWith(".css")) { BlinkBrowserPInvoke.wkeNetSetMIMEType(job, Marshal.StringToCoTaskMemAnsi("text/css")); } else if (url.EndsWith(".png")) { BlinkBrowserPInvoke.wkeNetSetMIMEType(job, Marshal.StringToCoTaskMemAnsi("image/png")); } else if (url.EndsWith(".gif")) { BlinkBrowserPInvoke.wkeNetSetMIMEType(job, Marshal.StringToCoTaskMemAnsi("image/gif")); } else if (url.EndsWith(".jpg")) { BlinkBrowserPInvoke.wkeNetSetMIMEType(job, Marshal.StringToCoTaskMemAnsi("image/jpg")); } else if (url.EndsWith(".js")) { BlinkBrowserPInvoke.wkeNetSetMIMEType(job, Marshal.StringToCoTaskMemAnsi("application/javascript")); } else if (url.EndsWith(".htm") || url.EndsWith(".html")) { BlinkBrowserPInvoke.wkeNetSetMIMEType(job, Marshal.StringToCoTaskMemAnsi("text/html")); } else { BlinkBrowserPInvoke.wkeNetSetMIMEType(job, Marshal.StringToCoTaskMemAnsi("application/octet-stream")); } IntPtr unmanagedPointer = Marshal.AllocHGlobal(bytes.Length); Marshal.Copy(bytes, 0, unmanagedPointer, bytes.Length); BlinkBrowserPInvoke.wkeNetSetData(job, unmanagedPointer, bytes.Length); // Call unmanaged code Marshal.FreeHGlobal(unmanagedPointer); } else { ResNotFond(url, job); } } } else { ResNotFond(url, job); } return(true); } else { //如果需要 OnwkeLoadUrlEndCallback 回调,需要取消注释下面的 hook BlinkBrowserPInvoke.wkeNetHookRequest(job); } return(false); }