web应用_web应用开发 - CSDN
精华内容
参与话题
  • Unity3D的WebGL开发(一)发布设置

    万次阅读 多人点赞 2016-11-03 15:24:14
    一.一般发布设置分以下五大类:(menu: Edit > Project Settings > Player) 1**Resolution and Presentation:** 设置分辨率和显示(如显示方向) 2 **Icon:**APP图标 3 Splash Image: 载入图片 ...

    一.一般发布设置分以下五大类:(menu: Edit > Project Settings > Player)
    1**Resolution and Presentation:** 设置分辨率和显示(如显示方向)
    2 **Icon:**APP图标
    3 Splash Image: 载入图片
    4 Other Settings: 其他设置
    5 Publishing Settings: details of how the built application is prepared for delivery from the app store or host webpage.

    二。WebGL Player 设置Publishing Settings
    这里写图片描述
    WebGL Memory Size 设置内存,单位是兆。太小会很卡,太大浏览器会崩溃。
    Data caching 开缓存可以把文件缓存到本地,让下次运行加快。

    展开全文
  • UnityWebgl平台与JS交互、使用UnityWebRequest对接Unity与前端js交互web数据请求 Unity与前端js交互 在UnityWebgl平台上,经常会从前端获取参数,如token、host等,使用jslib与前端js代码进行交互。只需要在Plugins...

    UnityWebgl平台与JS交互、使用UnityWebRequest对接

    Unity与前端js交互

    在UnityWebgl平台上,经常会从前端获取参数,如token、host等,使用jslib与前端js代码进行交互。只需要在Plugins文件夹中创建一个xxx.jslib文件即可。
    jslib文件代码如下:

    mergeInto(LibraryManager.library, {
    	getUrlParams: function (defaultValue) {
    		var name = Pointer_stringify(defaultValue);
      		var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
      		var r = window.location.search.substr(1).match(reg);  //匹配目标参数
      		if (r != null){
    			var returnStr = unescape(r[2]);
    			var bufferSize = lengthBytesUTF8( returnStr) + 1;
    			var buffer = _malloc(bufferSize);
    			stringToUTF8(returnStr, buffer, bufferSize);
    			 return buffer;
    		} 
    		else return null; //返回参数值
    	},
     });
    

    想要在Unity中调用jslib中的getUrlParams方法,只需要在Unity中合适的地方添加以下代码后调用即可:

        [DllImport("__Internal")]
        private static extern string getUrlParams(string name);
    

    注意:
    在Unity中向js传递字符串时需要在js中使用Pointer_stringify(str)进行转换。
    在js中向Unity返回字符串的时候也需要进行如下操作:
    var bufferSize = lengthBytesUTF8( returnStr) + 1;
    var buffer = _malloc(bufferSize);
    stringToUTF8(returnStr, buffer, bufferSize);
    return buffer;

    web数据请求

    这里封装了一下UnityWebRequest,只需要提供对应的参数和回调即可进行数据请求,包括可选择对数据进行Base64加密。

    public enum UnityWebRequestType
    {
        POST,
        GET
    }
    
        /// <summary>
        /// 发送HTTP数据
        /// </summary>
        /// <param name="type">请求类型</param>
        /// <param name="url">请求地址</param>
        /// <param name="jsonData">传输的数据</param>
        /// <param name="sendBase64">发送数据是否需要Base64加密</param>
        /// <param name="getBase64">获取数据是否需要Base64加密</param>
        /// <param name="failureCallBack">失败回调</param>
        /// <param name="successCallBack">成功回调</param>
        /// <param name="otherHeaderName">额外添加的头名称</param>
        /// <param name="otherHeaderValue">额外添加的头值</param>
        public void SendHttpMessage(UnityWebRequestType type, string url, string jsonData, bool sendBase64, bool getBase64, UnityAction failureCallBack, UnityAction<string> successCallBack, string[] otherHeaderName, string[] otherHeaderValue)
        {
            StartCoroutine(WebRequest(type, url, jsonData, sendBase64, getBase64, failureCallBack, successCallBack, otherHeaderName, otherHeaderValue));
        }
    
        private IEnumerator WebRequest(UnityWebRequestType type, string url, string jsonData, bool sendBase64, bool getBase64, UnityAction failureCallBack, UnityAction<string> successCallBack, string[] otherHeaderName, string[] otherHeaderValue)
        {
            Debug.Log(type.ToString() + "\t" + url + "\t" + jsonData);
            if (sendBase64)
            {
                jsonData = Convert.ToBase64String(Encoding.UTF8.GetBytes(jsonData));
            }
            byte[] body = Encoding.UTF8.GetBytes(jsonData);
    
    
            UnityWebRequest unityWeb = new UnityWebRequest(@url, type.ToString());
            unityWeb.uploadHandler = new UploadHandlerRaw(body);
            unityWeb.SetRequestHeader("Content-Type", "application/json;charset=utf-8");
            //unityWeb.SetRequestHeader("Authorization", "Bearer " + token);
            if (otherHeaderName != null)
            {
                for (int i = 0; i < otherHeaderName.Length; i++)
                {
                    unityWeb.SetRequestHeader(otherHeaderName[i], otherHeaderValue[i]);
                }
            }
            
            unityWeb.downloadHandler = new DownloadHandlerBuffer();
            yield return unityWeb.SendWebRequest();
    
            if (unityWeb.isNetworkError || unityWeb.isHttpError)
            {
                Debug.LogError("UnityWebRequest 请求失败:" + unityWeb.error);
                failureCallBack?.Invoke();
                yield break;
            }
    
            if (unityWeb.isDone)
            {
                string result = unityWeb.downloadHandler.text;
                if (getBase64)
                {
                    byte[] c = Convert.FromBase64String(result);
                    result = Encoding.UTF8.GetString(c);
                }          
                Debug.Log("UnityWebRequest 请求成功:" + result);
                successCallBack?.Invoke(result);
            }
        }
    
        /// <summary>
        /// 发送表单数据
        /// </summary>
        /// <param name="url">请求地址</param>
        /// <param name="fromKey">表单Key数据</param>
        /// <param name="fromValue">表单Value数据</param>
        /// <param name="sendBase64">发送数据是否需要Base64加密</param>
        /// <param name="getBase64">获取数据是否需要Base64加密</param>
        /// <param name="failureCallBack">失败回调</param>
        /// <param name="successCallBack">成功回调</param>
        public void SendHttpMessageByForm(string url, string[] fromKey, string[] fromValue, bool sendBase64, bool getBase64, UnityAction failureCallBack, UnityAction<string> successCallBack)
        {
            StartCoroutine(WebRequestFrom( url, fromKey, fromValue, sendBase64, getBase64, failureCallBack, successCallBack  ));
        }
    
        private IEnumerator WebRequestFrom( string url,string[] fromKey, string[] fromValue ,bool sendBase64, bool getBase64, UnityAction failureCallBack, UnityAction<string> successCallBack)
        {
            WWWForm form = new WWWForm();
            if (fromKey != null)
            {
                for (int i = 0; i < fromKey.Length; i++)
                {
                    if (sendBase64)
                    {
                        fromValue[i] = Convert.ToBase64String(Encoding.UTF8.GetBytes(fromValue[i]));
                    }
                    Debug.Log("表单添加字段:" + fromKey[i] + "\t" + fromValue[i]);
                    form.AddField(fromKey[i], fromValue[i]);
                }
            }
            UnityWebRequest unityWeb = UnityWebRequest.Post(@url, form);
    
            unityWeb.downloadHandler = new DownloadHandlerBuffer();
            yield return unityWeb.SendWebRequest();
    
            if (unityWeb.isNetworkError || unityWeb.isHttpError)
            {
                Debug.LogError("UnityWebRequest 请求失败:" + unityWeb.error);
                failureCallBack?.Invoke();
                yield break;
            }
    
            if (unityWeb.isDone)
            {
                string result = unityWeb.downloadHandler.text;
                if (getBase64)
                {
                    byte[] c = Convert.FromBase64String(result);
                    result = Encoding.UTF8.GetString(c);
                }
                Debug.Log("UnityWebRequest 请求成功:" + result);
                successCallBack?.Invoke(result);
            }
        }
    
    展开全文
  • Unity webGL以及HTML与unity通信

    万次阅读 2017-11-13 14:33:08
    1;什么是Unity webGLwebGL 的编译...想要编译和测试WebGL程序,只需要在Build Playersetting里选择WebGL编译平台即可。 2:unity是怎么样发布为webGl程序的为了运行webgl,需要我们的所有代码都是采用JavaScript编

    1;什么是Unity webGL

    webGL 的编译选项允许unity发布像使用了HTML5和webGL渲染API技术来使unity程序可以跑在浏览器中的javascript 程序。想要编译和测试WebGL程序,只需要在Build Playersetting里选择WebGL编译平台即可。
    2:unity是怎么样发布为webGl程序的
    为了运行webgl,需要我们的所有代码都是采用JavaScript编写,unity使用emscripten编译器工具链交叉编译unity运行时的代码(C和C++)为asm.js JavaScript,asm.js 是一个高度优化的JavaScript子集,并且可以采用javascript 的AOT编译引擎将asm.js代码变为高性能的代码。 如果代码采用C#编译,那么unity将使用Il2CPP技术将C#代码转换为相应的的C++源文件,然后编译器使用emscripten来使C++再转为JavaScript代码。当然,这里会存在兼容性的问题。unity的webGL 程序目前在大多数的桌面浏览器中都能支持,但是移动端的目前还无法支持。
    1:,Unity并不是所有的功能都能在webGl中支持,
    首先;由于JavaScript不支持多线程,所以多线程只适用在unity内部线程对程序的加速和一些托管DLL以及使用一些线程脚本代码 ,基本上System.Threading命名空间里的东西是不支持的。
    2:webGL还无法在VS和MonoDevelop里调试
    3:由于安全问题浏览器不能直接访问IP套接字。
    4:WebGL图形API相当于OpenGL ES 2,这具有一定的局限性。
    5:WebGL生成使用自定义后台音频,基于Web Audio API。这只支持基本的音频功能
    6:WebGL是一个AOT(静态编译)平台,所以它不允许动态生成的代码中使用system.reflection.emit。这是对所有其他il2cpp平台,如iOS,和大多数控制台是相同的。
    3:浏览器的兼容情况

    桌面浏览器兼容情况
    Mozilla Firefox 42 Google Chrome 46 Apple Safari 9.0 MS Internet Explorer 11 MS Edge 13
    对运行unity的webGL内容的支持能力 X (1) X (1) X (Safari 8 and higher) X (IE 11 and higher) X
    Web Audio unity WebGL中的音频需要调用Web Audio API来播放 X X X - X
    全屏支持 X X - (2) X X
    鼠标锁定支持 X X - - - (3)
    Gamepad support X X - - X
    IndexedDB Required for local storage as used by the Data Caching feature, the PlayerPrefs class, and WWW.LoadFromCacheOrDownload. X (4) X X (4) X X
    WebSockets Required for Networking. X X X X X
    WebRTC Required by the WebCamTexture class. X X - - X
    WebGL 2.0 - (5) - - - -
    asm.js AOT compilation asm.js is a susbset of JavaScript for which a browser can specifically optimize. Browsers which implement asm.js support may be able to run Unity WebGL content faster, as Unity uses asm.js. X - - - X
    Notes (6) (7)

    注释:
    1:WebGL可能不支持特定的老显卡。
    2:Safari浏览器支持HTML5全屏API,但全屏模式时没有键盘输入,所以unity在Safari中运行时将禁止全屏功能。
    3:Edge不支持鼠标锁定,Edge13可能会支持。
    4:Firefox和Safari上42版本不支持在一个iframe中运行的内容IndexedDB。火狐43或更高版本将修复问题。、
    5:Firefox 支持WebGL2.0,但它默认是禁用的,需要启用:配置。
    6:Chrome可能需要大量的内存来解析生成的JavaScript代码,当在32位版本浏览器中加载webgl内容时可能会导致内存错误或崩溃。
    7:IE浏览器不支持音频并且还太慢对于加载unity的webGL内容,出于这个原因,

    unity将在使用Internet Explorer打开内容时显示使用不支持的浏览器的警告
    4:webGl的发布工作

     编译一个webGL 项目时,unity将会创建一些文件
    

    *一个index.html文件,这个文件可以直接使用浏览器打开,但是出于考虑,chrome限制用户从本地打开这种文件。
    *一个Development和 Release 文件夹, 这些是生成的输出文件,一个用于继续开发,一个是可以用于直接发布。
    *一个TemplateData文件夹,一些资源文件。
    发布时当勾选Development Build复选框时,unity将生成一个Development Build(带有分析器支持和错误控制台);
    此外,Development Build是非压缩的,所以生成的JavaScript是可读的并且保留了函数名(以便于你得到有用的错误堆栈跟踪)但是非常分散。
    使用Use pre-built Engine选项可用于加快开发迭代时间在开发过程中。启用此选项时,只有托管代码将被重建,然后与预构建Unity引擎动态链接,因此工程重新生成的速度会提升30%到40%。但是注意,这种编译只适合开的目的,因为这样会产生多余的引擎代码。此外,由于动态链接开销,这种编译的性能有点慢于正常编译。
    当你想配置你的unity webGL内容时必须勾选Autoconnect Profiler复选框,虽然在webGL上连接分析器使用WebSockets ,但是浏览器只允许从内容向外的连接,所以在WebGL使用Profiler的唯一方法是选中“自动连接分析器”有内容连接到编辑。
    5:webGl Graphics
    WebGL是一个浏览器的图形渲染引擎API,目前是基于OpenGL ES 2.0 图形库。Unity webGL目前只支持烘焙GL不支持实时GL,而且,仅仅支持非定向lightmaps,webGL在运行时也不支持过程化材质,过程化材质在编译时将被烘焙为普通材质。webGL 也不支持使用Movie Texture播放视频,但是你可以通过使用HTML元素在WebGL里高效的播放视频。
    6:WebGL的网络通信
    由于安全性的影响,JavaScript代码没有直接访问IP套接字来实现网络连接。因此,该.NET网络类(System.Net命名空间中的一切,特别是System.Net.Sockets)在WebGL中不能工作。UnityEngine.Network* 类也是这样,编译WebGL时将找不到这些类。如果你需要在WebGL使用网络通信,你现在可以选择使用unity的WWW 或UnityWebRequest 类或则支持webGL的新的Unity 网络通信特性。或在JavaScript中使用WebSockets或WebRTC实现你自己的网络通信。
    7:WWW 或WebRequest类的使用
    WebGl支持WWW和unitywebrequest类。他们在JavaScript里使用XMLHttpRequest类实现,使用浏览器来处理网络请求。这对访问跨域资源施加了一些安全限制。基本上对于服务器的任何WWW请求不同于托管服务器的是WebGL内容需要通过你试图访问的服务器授权。在WebGL的跨域访问WWW资源,您试图访问的服务器需要使用CORS授权。如果你使用WWW或unitywebreqest试图访问内容,但是远程服务器没有CORS系统设置或没有正确配置,你会在浏览器控制台看到类似这样的错误:
    Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://myserver.com/. This can be fixed by moving the resource to the same domain or enabling CORS.
    CORS表示跨域资源共享。基本上,服务器需要向它发送的HTTP响应里添加一些访问控制头,这将告诉浏览器允许它访问服务器上的内容。这是一个控制头设置的例子,将允许unity WebGL访问来源于任何Web服务器资源,通过常见的请求头和使用HTTP GET,POST或OPTIONS方法:
    “Access-Control-Allow-Credentials”: “true”,
    “Access-Control-Allow-Headers”: “Accept, X-Access-Token, X-Application-Name, X-Request-Sent-Time”,
    “Access-Control-Allow-Methods”: “GET, POST, OPTIONS”,
    “Access-Control-Allow-Origin”: “*”,

    注意,www.responseheaders限于实际响应标头的一个子集,根据7.1.1的CORS规范。还要注意XMLHttpRequest不允许使用数据流,因此WebGL的WWW类只会处理下载完成的数据(所以assestbundles不能像其他平台上那样解压和加载)。
    8:为什么需要通信
    当为web构建内容时,您可能需要与web页上的其他元素进行通信。或者您可能希望使用Unity当前不默认的Unity API来实现功能。在这两种情况下,您都需要直接与浏览器的JavaScript引擎对接。unity的WebGL提供不同的方法来实现这些。
    9:从Unity里调用JavaScript里的方法。
    你可以使用下面的代码从浏览器的JavaScript里调用unity里的方法:
    SendMessage (‘MyGameObject’, ‘MyFunction’, ‘foobar’);
    MyGameObject是场景内物体名称,MyFunction方法名,foobar是参数
    下面是个例子:

    <!--传值方法-->
        <script type="text/javascript">
            //按钮点击事件id为test()
            function test() {
                //获取ID名为storeID的Value的值,赋值给sparm
                var sparm= document.getElementById("storeID").value;
                //传参到U3D场景内GoName挂载脚本的MyFunc函数,参数为一个字符串
                SendMessage("GoName", "MyFunc", sparm);
            }
        </script>

    unity端实例

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class Test : MonoBehaviour {
        public Text WebText;
        public void MyFunc(string abc)
        {
            WebText.text = abc;  //在U3D的ugui的WebText上显示传值进来的字符串
        }
    }

    10:如何通过SendMessage传递多个参数
    我们知道unity的SendMessage只接受一个字符串参数,但是我们的项目经常会用到多参数,这样就很尴尬了,关于这个,目前我还没找到好的方式,只是看到大家都在使用连接多个string参数为一个字符串的形式,当然,这样也只是能传递个string参数。

    <!--传值方法-->
        <script type="text/javascript">        
            function test() {          
                var Parm_1= "Parm_1";
                var Parm_2= "Parm_2";
                var Parm_3= "Parm_3";
                //传参到U3D场景内GoName挂载脚本的MyFunc函数,参数为一个字符串
                SendMessage("GoName","MyFunc",Parm_1+'-'+Parm_2+'-'+Parm_3);
            }
        </script>

    unity里的方法为:

    void MyFunc(string indata)
    {
    
    string[] words = indata.Split('-');
    
    data1 = words[0];
    moredata2 = words[1];
    anotherpiece3 = words[2];
    
    }

    11:从Unity里调用网页里的方法
    你可以使用Application.ExternalCall()和 Application.ExternalEval()函数调用嵌入网页的名为functionName的JavaScript函数,并传递给定的参数。支持原始的数据类型(string, int, float, char)和这些类型的数字。如何其他的对象被转化为字符串(使用ToString方法)并作为字符串传递。这个函数调用时不会被阻塞,即ExternalCall立即返回的功能而不必等待被完成。传递的参数数量是可变的。

    // 调用网页上的MyFunction1并不使用参数。
    Application.ExternalCall ("MyFunction1");
    //调用网页上的MyFunction2并使用字符串参数。
    Application.ExternalCall ("MyFunction2", "Hello World!");
    //调用网页上的MyFunction3并使用几个不同类型的参数。
    Application.ExternalCall ("MyFunction3", "str", 3, 5.0);

    被调用的在HTML中的函数只需要使用标准的语法即可,例如:

    <script type="text/javascript">
    // 响应Unity的调用并接受"Hello World!" 做为参数
    function MyFunction2( arg )
        {
            alert( arg );
        }
    </script>
    展开全文
  • 1.Unity WebGL 跨域访问CORS 头缺少 'Access-Control-Allow-Origin' 解决方案:https://blog.csdn.net/ab914025636/article/details/82019805 2.如果开发的项目占用内存资源较大需要修改WebGL内存大小 设置内存...

    1.Unity WebGL 跨域访问CORS 头缺少 'Access-Control-Allow-Origin'

    解决方案:https://blog.csdn.net/ab914025636/article/details/82019805

    2.如果开发的项目占用内存资源较大需要修改WebGL内存大小

    设置内存大小根据自身项目大小来设置

    3.勾选代码剥离模式减小发布文件的大小

    勾选后发布时自动剥离未使用到的组件模块

    4.优化图片尺寸和色彩模式,web端项目不宜过大,影响加载速度

    选择合适的图片尺寸和色彩模式以此减小图片占用的内存

    5.C#与JavaScript通信

    大部分开发者都使用C#开发,与JavaScript通信至关重要

    C#调用JavaScript的JSFun方法

     Application.ExternalCall("JSFun");

    6.发布的运行文件推荐使用火狐或谷歌打开,如果在本地测试浏览器快捷方式的目标后面加上“ --allow-file-access-from-files”

     --allow-file-access-from-files

    注意exe后面有一个空格

    7.unity开发WebGL工程存在无法输入中文的问题

    解决方案(CSDN):https://blog.csdn.net/u013172864/article/details/78873632

    GitHub:https://github.com/unity3d-jp/WebGLNativeInputField

    8.unity在WebGL平台是不支持线程,可以使用协程

    展开全文
  • Unity 在WebGL使用WebService

    千次阅读 2018-05-04 12:34:46
    继WCF通信在打包安卓调通之后,开始调研WCF在WebGL中是否能够使用。在Unity中切换至WebGL,测试WCF没有任何问题。但是打包之后,报了一个,Reflection.Emit的问题。查找资料发下WebGL不支持Reflection.Emit。最后开始...
  • 废话部分 最近面试了很多公司,感慨颇多 技术选型是重中之重,应该是所有企业的共识,这不仅关于到当前项目的交付,也涉及到未来项目的生命线和前景。但就有人当儿戏。 不管是什么技术,选型决策者都应该具备开阔的...
  • Unity 发布WebGL并与JS进行传参交互

    万次阅读 2018-03-06 10:06:50
    Unity发布WebGL后&lt;head&gt;标签中脚本内容为:var gameInstance = UnityLoader.instantiate("gameContainer", "Build/WebGlTest.json", { onProgress: UnityProgress }); 在其后...
  • 关于Unity 中WebGL 与Http通信

    千次阅读 2018-07-13 16:00:21
    1;什么是Unity webGLwebGL 的编译...想要编译和测试WebGL程序,只需要在Build Playersetting里选择WebGL编译平台即可。 2:unity是怎么样发布为webGl程序的 为了运行webgl,需要我们的所有代码都是采用JavaScript...
  • 什么是Unity webGL webGL 的编译选项允许unity发布像使用了HTML5和webGL渲染API技术来使unity程序可以跑在浏览器中的javascript 程序。想要编译和测试WebGL程序,只需要在Build Playersetting里选择WebGL编译平台...
  • 原本我将三维模型发布成WebGL,在前端执行各种三维模型函数。 但其中有一个函数,在前端运行的话吃内存太大,运行时间太长,而最终返回的结果是字符串。 因此,我想能不能把这个功能放在后台,前端提交请求后,由...
  • OpenCV for Unity 2.3.3-1,支持安卓,IOS,Windows,WebGL,Linux,MacOS,可以在Unity3D中调用OpenCV的接口,包含多个平台的对接
  • Unity发布Web之支持手机端

    千次阅读 2019-09-22 13:50:11
    相信有许多人和小黑一样,遇到Unity发布WebGL后,需要在在手机浏览器上运行起来,所以我要把它分享出来,帮助大家!!!!!
  • Unity3D开发之unity和js通信交互

    千次阅读 2019-08-19 13:17:56
    一.老版方法 unity发布webplayer平台后会输出html和unity3d文件。... 1.Unity发送消息给JS unity想要和js交互,提供了一个函数:Application.ExternalCall();此函数仅限于webplayer平台下。...f...
  • unity5.6.5Our latest release, and the final installment in the Unity 5 cycle, includes the Progressive Lightmapper preview, new Light Modes, Vulkan support, a new video player, support for Facebook Ga...
  • 通过写这篇文章从开源中国站上面看了很多,也从那里将开源软件的基本的介绍和下载地址拷贝到了文章当中,总体给我的一个感受就是阿里的开源实在太强大了,多到需要花大量的时间去了解。今天写这篇文章主要是对阿里...
  • 与第三方模型插件对接1.1插件地址1.2示例2.内部格式的转换2.1单个模型导出为其他格式2.2 模型转换 使用产品:SuperMap iDesktop 产品下载地址:http://support.supermap.com.cn/DownloadCenter/ProductPlatform.aspx...
  • 除了游戏之外,近年来,Cocos 被应用于越来越多的领域,例如数字娱乐、数字文创、在线教育、虚拟展会、电商等等。Cocos 人才在市场上也拥有更多的就业选择空间,各大招聘网站上,Coco...
  • 浏览器内核了解

    千次阅读 2018-04-28 00:21:15
    浏览器内核分为渲染引擎和js引擎。...js引擎则负责解析JavaScript,实现网页的动态效果。一开始渲染引擎与js引擎并没有区分的很明确,但是后来js引擎越来越独立,内核倾向于只指渲染引擎。内核可以分为Trident、Gecko、...
  • 全面了解浏览器(内核)发展史

    千次阅读 2018-06-27 19:52:00
    浏览器发展史现在浏览器已经成为网上生活的重要家园和工具。...曾经AOL收购Netscape后被大骂是“毁人不倦”,曾经也有很多人为IE写过“墓志铭”,曾经很多人还见证了Mozilla从出生到壮大,也曾惊讶于苹果Webkit的英明,...
1 2
收藏数 21
精华内容 8
关键字:

web应用