{"id":204286,"date":"2013-12-03T05:48:03","date_gmt":"2013-12-03T01:48:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=204286"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=204286","title":{"rendered":"<span class=\"post_title\">\u041a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 GUI \u043d\u0430 C# \u0438 \u0432\u0435\u0431-\u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u0421\u0430\u043c\u0430\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430, \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0443\u0441\u0442\u043d\u0430\u044f, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u0430 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u2013 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e(Windows, Linux, Mac) \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043f\u043e\u0434 \u0434\u0435\u0441\u043a\u0442\u043e\u043f \u0438 \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e(Windows, Android, iPhone). \u041f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0438\u043c \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u041e\u0421.<br \/>  \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f <a href=\"http:\/\/www.mono-project.com\/\">Mono<\/a> \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u0441 GUI \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c. \u0418\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u043f\u043e\u0434 .Net(Windows Forms, WPF) \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434 Windows, \u0438 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0431\u044b\u043b \u043f\u0435\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u043f\u044b\u0442 \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Windows Forms. \u041f\u043e\u0434 Linux \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"http:\/\/www.mono-project.com\/GtkSharp\">GtkSharp<\/a>, \u043d\u043e \u0438\u0434\u0435\u044f \u0441\u0442\u0430\u0432\u0438\u0442\u044c Mono \u043d\u0430 Windows \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 .Net \u043c\u043d\u0435 \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u0443\u044e \u041e\u0421.<br \/>  \u0427\u0442\u043e \u0432 \u044d\u0442\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043c\u043e\u0433\u043b\u0430 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430 .Net(\u0441 \u0443\u043a\u043b\u043e\u043d\u043e\u043c \u043f\u043e\u0434 \u0432\u0435\u0431)? \u0420\u0435\u0448\u0438\u043b\u0438 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c Webkit \u0438 \u043f\u0438\u0441\u0430\u0442\u044c GUI \u043d\u0430 \u0441\u0432\u044f\u0437\u043a\u0435 html-js-css.<br \/>  \u041d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u043c\u044b 2 \u0433\u043e\u0434\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0434\u043b\u044f Windows \u0438 \u0433\u043e\u0434 \u2013 \u043f\u043e\u0434 Linux \u0438 Mac. \u0414\u043e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043f\u043e\u043a\u0430 \u0440\u0443\u043a\u0438 \u043d\u0435 \u0434\u043e\u0448\u043b\u0438.<br \/>  <a name=\"habracut\"><\/a><\/p>\n<h4>\u0417\u0430\u0447\u0435\u043c?<\/h4>\n<p>  <b>\u0418\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u0434 \u0432\u0441\u0435\u043c\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u043c\u0438.<\/b> \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u043b\u0438\u0448\u044c \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u043f\u0440\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435 \u0448\u0440\u0438\u0444\u0442\u043e\u0432, \u043f\u0440\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u0432 \u0432\u0435\u0440\u0441\u0442\u043a\u0435.<br \/>  <b>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u043e\u0434 \u043e\u0434\u043d\u0443 \u041e\u0421.<\/b> \u042d\u043c\u043f\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0443\u0442\u0435\u043c \u043d\u0430\u043c\u0438 \u0431\u044b\u043b\u043e \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u043e, \u0447\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0435\u0441\u0442\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043f\u043e\u0434 Windows, \u0430 \u043f\u043e\u0434 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u043c\u0438 \u043b\u0438\u0448\u044c \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0435\u0440\u0435\u0434 \u0440\u0435\u043b\u0438\u0437\u043e\u043c.<br \/>  <b>\u0412\u0441\u044f \u0441\u0438\u043b\u0430 \u0432\u0435\u0431-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/b> \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0432\u0435\u0431-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c html5, css3, \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041c\u044b, \u043a\u0441\u0442\u0430\u0442\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0432 \u0438\u0442\u043e\u0433\u0435 \u0443 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 js.<br \/>  <b>\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 frontend \u0438 backend.<\/b> \u041f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u0435\u0441\u0442\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043b\u043e\u0433\u0438\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u0432 \u0430\u043f\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0448 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u2014 \u044d\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0441 \u00ab\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c\u00bb \u0447\u0435\u0440\u0435\u0437 ajax-\u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u0412 \u0434\u0435\u0441\u043a\u0442\u043e\u043f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u044d\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u044d\u0442\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432 Chrome, \u0437\u0430\u043a\u0438\u043d\u0443\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 mock \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440. \u041e\u0441\u043e\u0431\u043e \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0435 \u0432 \u0441\u0435\u0431\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a dom \u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"http:\/\/getfirebug.com\/firebuglite\">firebug lite<\/a> \u0432 \u0434\u0435\u0441\u043a\u0442\u043e\u043f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438.<br \/>  <b>\u0415\u0441\u0442\u044c \u043e \u0447\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0445\u0430\u0431\u0440.<\/b> \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u0430\u0437\u0430\u0440\u0442\u0430 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0442 \u0441\u0443\u0440\u043e\u0432\u044b\u0435 \u0431\u0443\u0434\u043d\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430. <\/p>\n<h4>\u041a\u0430\u043a?<\/h4>\n<p>  \u041f\u043e\u0434 \u043a\u0430\u0436\u0434\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, GUI \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u2013 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0442\u043e\u0433\u043e \u0432\u043e \u0432\u0441\u0435 \u043e\u043a\u043d\u043e.<br \/>  \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c html \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u043d\u0430\u0439\u0442\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u044b js-C# \u0438 \u0421#-js. \u0420\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u0432 \u0432\u044b\u0437\u043e\u0432\u0430\u0445 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c\u0438, \u043d\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u2013 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0440\u0430\u0437\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b.<\/p>\n<h5>Mac OSX<\/h5>\n<p>  \u0412\u044b\u0431\u043e\u0440\u0430 \u0447\u0442\u043e \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043c\u0430\u043a\u043e\u043c \u043d\u0435\u0442\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <a href=\"http:\/\/www.mono-project.com\/MonoMac\">MonoMac<\/a> \u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440. \u041d\u043e \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0432\u043e\u0445 \u0432 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f\u0445. \u041c\u043e\u0436\u043d\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 Mono, \u0442.\u0435. \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0430\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c Mono \u0438, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 AppStore. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c Mono \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0442\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u043e\u043a\u0443\u043f\u0430\u0442\u044c <a href=\"http:\/\/xamarin.com\/mac\">Xamarin.Mac<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u043e\u0439\u0434\u0435\u0442\u0441\u044f \u0432 300 \u0438\u043b\u0438 1000 \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0437\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430.<br \/>  \u041f\u043e\u0434 \u043c\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0441\u0430\u043c\u044b\u0439 \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u044b\u0439 \u043a\u043e\u0434. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043d\u0435 \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u2014 \u0432\u044b\u0437\u043e\u0432 \u0421# \u0438\u0437 js.<br \/>  \u041f\u043e\u0441\u043b\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 js \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0438\u0437 C#. \u041d\u0430\u0437\u043e\u0432\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 interaction:  <\/p>\n<pre><code class=\"cs\">    webView.WindowScriptObject.SetValueForKey(this, new NSString(&quot;interaction&quot;)); <\/code><\/pre>\n<p>  \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u044b \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u043a\u0430\u043a\u0438\u0435 \u0438\u0437 \u043d\u0438\u0445 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u043d\u044b \u0438\u0437 js:  <\/p>\n<pre><code class=\"cs\">    [Export(&quot;callFromJs&quot;)]     public void CallFromJs(NSString message)     {         CallJs(&quot;showMessage&quot;, message + &quot; \u041e\u0442\u0432\u0435\u0442 \u0438\u0437 C#&quot;);     }      [Export (&quot;isSelectorExcludedFromWebScript:&quot;)]     public static bool IsSelectorExcludedFromScript(MonoMac.ObjCRuntime.Selector sel)     {         if (sel.Name == &quot;callFromJs&quot;)             return false;          return true; \/\/ \u0417\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u043c \u0432\u044b\u0437\u043e\u0432 \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432     } <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432 js \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u0441allFromJs:  <\/p>\n<pre><code class=\"javascript\">    window.interaction.callFromJs('\u0412\u044b\u0437\u043e\u0432 \u0438\u0437 js.'); <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u043b\u043d\u044b\u0439 \u043b\u0438\u0441\u0442\u0438\u043d\u0433 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">    public partial class MainWindowController : MonoMac.AppKit.NSWindowController     {         \/*\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434*\/          \/\/\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438\u0437 xib(nib) \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u043e\u0440\u043e\u0432\u0430\u043d \u0438 \u0432\u0441\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 UI \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b         public override void AwakeFromNib ()         {             base.AwakeFromNib ();              \/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 js \u0441\u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a C#. \u041d\u0430\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e interaction             \/\/ window.interaction.callFromJs(param1, param2, param3) - \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 \u0438\u0437 js.             webView.WindowScriptObject.SetValueForKey(this, new NSString(&quot;interaction&quot;));              webView.MainFrame.LoadHtmlString (@&quot;                 &lt;html&gt;                     &lt;head&gt;&lt;\/head&gt;                     &lt;body id=body&gt;                         &lt;h1&gt;\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441&lt;\/h1&gt;                         &lt;button id=btn&gt;\u0412\u044b\u0437\u0432\u0430\u0442\u044c C#&lt;\/button&gt;                         &lt;p id=msg&gt;&lt;\/p&gt;                          &lt;script&gt;                             function buttonClick() {                                 interaction.callFromJs('\u0412\u044b\u0437\u043e\u0432 \u0438\u0437 js.');                             }                             function showMessage(msg) {                                 document.getElementById('msg').innerHTML = msg;                             }                              document.getElementById('btn').onclick = buttonClick;                         &lt;\/script&gt;                     &lt;\/body&gt;                 &lt;\/html&gt;&quot;, null);          }          \/\/ \u0418\u0437 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u043a\u0430\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u043d\u044b \u0438\u0437 js         [Export (&quot;isSelectorExcludedFromWebScript:&quot;)]         public static bool IsSelectorExcludedFromWebScript(MonoMac.ObjCRuntime.Selector aSelector)         {             if (aSelector.Name == &quot;callFromJs&quot;)                 return false;              return true; \/\/ \u0417\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u043c \u0432\u044b\u0437\u043e\u0432 \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432         }          [Export(&quot;callFromJs&quot;)]         public void CallFromJs(NSString message)         {             CallJs(&quot;showMessage&quot;, new NSObject[] { new NSString(message + &quot; \u041e\u0442\u0432\u0435\u0442 \u0438\u0437 C#&quot;) });         }          public void CallJs(string function, NSObject[] arguments)         {             this.InvokeOnMainThread(() =&gt;             {                 webView.WindowScriptObject.CallWebScriptMethod(function, arguments);             });         }     } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <a href=\"https:\/\/github.com\/jacob-l\/Browser\">\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440<\/a> \u043d\u0430 github.<br \/>  \u042d\u0442\u043e\u0433\u043e \u0432\u0438\u0434\u0435\u043e \u043c\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u043b\u043e, \u043a\u043e\u0433\u0434\u0430 \u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0441\u044f: \u00ab\u041a\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 WebView \u0432 \u043a\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u00bb.<br \/>  <iframe loading=\"lazy\" width=\"560\" height=\"349\" src=\"\/\/www.youtube.com\/embed\/OUhaco61eMs?wmode=opaque\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<h5>Ubuntu<\/h5>\n<p>  \u041f\u043e\u0434 Mono \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0430\u043a\u0435\u0442 <a href=\"http:\/\/packages.debian.org\/ru\/source\/squeeze\/webkit-sharp\">webkit-sharp<\/a>.<br \/>  \u041f\u043b\u0430\u0432\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435 \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<br \/>  \u0414\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 C# \u0438\u0437 js \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435.  <\/p>\n<pre><code class=\"cs\">    browser.NavigationRequested += (sender, args) =&gt;     {         var url = new Uri(args.Request.Uri);         if (url.Scheme != &quot;mp&quot;)         {             \/\/mp - myprotocol.             \/\/\u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u044b\u0437\u043e\u0432\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430.             \/\/\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043f\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0441\u0441\u044b\u043b\u043a\u0430\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043a\u0430\u043a \u0438 \u043f\u0440\u0435\u0436\u0434\u0435             return;         }                      var parameters = System.Web.HttpUtility.ParseQueryString(url.Query);         handlers[url.Host.ToLower()](parameters);          \/\/\u041e\u0442\u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435         browser.StopLoading();     }; <\/code><\/pre>\n<p>  \u0412\u044b\u0437\u043e\u0432 \u0438\u0437 js \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"javascript\">    window.location.href = 'mp:\/\/callFromJs?msg=\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438\u0437 js.'; <\/code><\/pre>\n<p>  \u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 TitleChanged.<br \/>  \u0412 js \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c title \u0443 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430:  <\/p>\n<pre><code class=\"javascript\">    document.title = JSON.stringify({         method: 'callFromJs',         arguments: { msg: '\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438\u0437 js'}     }); <\/code><\/pre>\n<p>  \u0412 \u0421# \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 TitleChanged, \u043c\u044b \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u043c title \u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u043f\u043e\u0434\u0445\u043e\u0434\u0443 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a.<\/p>\n<p>  \u0412 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u043e\u0431\u0435\u0440\u0442\u043a\u0435 WebKit \u043c\u043e\u0436\u043d\u043e \u0438\u0437 \u0421# \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043b\u044e\u0431\u043e\u0439 js \u043a\u043e\u0434, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0437\u043e\u0432 js \u0438\u0437 C#:  <\/p>\n<pre><code class=\"cs\">    public void CallJs(string function, object[] args)     {         \/\/\u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c javascript         var js = string.Format(@&quot;             {0}.apply(window, {1});         &quot;, function, new JavaScriptSerializer().Serialize(args));          Gtk.Application.Invoke(delegate {             browser.ExecuteScript(js);         });     } <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u043b\u043d\u044b\u0439 \u043b\u0438\u0441\u0442\u0438\u043d\u0433 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">    public partial class MainWindow: Gtk.Window     {         private Dictionary&lt;string, Action&lt;NameValueCollection&gt;&gt; handlers;         private WebView browser;          public MainWindow (): base (Gtk.WindowType.Toplevel)         {             Build ();              CreateBrowser ();              this.ShowAll ();         }                  protected void OnDeleteEvent (object sender, DeleteEventArgs a)         {             Application.Quit ();             a.RetVal = true;         }          private void CreateBrowser ()         {             \/\/\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u0438\u0437 js             handlers = new Dictionary&lt;string, Action&lt;NameValueCollection&gt;&gt;             {                 { &quot;callfromjs&quot;, nv =&gt; CallJs(&quot;showMessage&quot;, new object[] { nv[&quot;msg&quot;] + &quot; \u041e\u0442\u0432\u0435\u0442 \u0438\u0437 \u0421#&quot; }) }             };              browser = new WebView ();              browser.NavigationRequested += (sender, args) =&gt;             {                 var url = new Uri(args.Request.Uri);                 if (url.Scheme != &quot;mp&quot;)                 {                     \/\/mp - myprotocol.                     \/\/\u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u044b\u0437\u043e\u0432\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430.                     \/\/\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043f\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0441\u0441\u044b\u043b\u043a\u0430\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043a\u0430\u043a \u0438 \u043f\u0440\u0435\u0436\u0434\u0435                     return;                 }                                  var parameters = System.Web.HttpUtility.ParseQueryString(url.Query);                  handlers[url.Host.ToLower()](parameters);                  \/\/\u041e\u0442\u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435                 browser.StopLoading();             };              browser.LoadHtmlString (@&quot;                     &lt;html&gt;                         &lt;head&gt;&lt;\/head&gt;                         &lt;body id=body&gt;                             &lt;h1&gt;\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441&lt;\/h1&gt;                             &lt;button id=btn&gt;\u0412\u044b\u0437\u0432\u0430\u0442\u044c C#&lt;\/button&gt;                             &lt;p id=msg&gt;&lt;\/p&gt;                              &lt;script&gt;                                 function buttonClick() {                                     window.location.href = 'mp:\/\/callFromJs?msg=\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438\u0437 js.';                                 }                                 function showMessage(msg) {                                     document.getElementById('msg').innerHTML = msg;                                 }                                  document.getElementById('btn').onclick = buttonClick;                             &lt;\/script&gt;                         &lt;\/body&gt;                     &lt;\/html&gt;                 &quot;, null);              this.Add (browser);         }          public void CallJs(string function, object[] args)         {             var js = string.Format(@&quot;                 {0}.apply(window, {1});             &quot;, function, new JavaScriptSerializer().Serialize(args));              Gtk.Application.Invoke(delegate {                 browser.ExecuteScript(js);             });         }     } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <a href=\"https:\/\/github.com\/jacob-l\/BrowserLinux\">\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440<\/a> \u043d\u0430 github.<\/p>\n<h5>Windows<\/h5>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043c\u044b \u0432\u0435\u0434\u0435\u043c \u043f\u043e\u0434 Windows.<br \/>  <a href=\"http:\/\/habrahabr.ru\/post\/154917\/\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438<\/a> \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u043c\u043e\u0438\u043c \u043a\u043e\u043b\u043b\u0435\u0433\u043e\u0439 \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434 \u0438 \u0437\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c. \u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u044d\u0442\u043e \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0443\u0435\u0442 \u043e \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0430. \u0422\u0430\u043a\u0436\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0435\u0442\u0430\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u0434\u043d\u043e\u0439 \u041e\u0421.<br \/>  \u042f \u043b\u0438\u0448\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044e <a href=\"https:\/\/github.com\/jacob-l\/BrowserWindows\">\u043f\u0440\u0438\u043c\u0435\u0440<\/a> \u043d\u0430 github.<\/p>\n<h5>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438<\/h5>\n<p>  \u0423 \u0442\u0430\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u043e\u0438\u0442 \u0437\u043d\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043d\u0430\u0448 \u043f\u0443\u0442\u044c.<br \/>  <b>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0441\u0445\u043e\u0434 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u0438 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435.<\/b> \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u043b\u044f \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043a\u0430\u043a \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f: Saas, \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0438\u043a\u043e\u0432, \u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f. \u041d\u043e \u0437\u0430\u0442\u043e \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043d\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043d\u0438 \u0441\u0430\u043c\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. <br \/>  <b>\u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/b> \u042d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0439 \u043c\u0438\u043d\u0443\u0441 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430. \u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442 50 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u044d\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u0435\u0441\u043b\u0438 \u0446\u0435\u043b\u0435\u0432\u0430\u044f \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u044f \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0441\u0442\u0430\u0440\u0443\u044e \u0442\u0435\u0445\u043d\u0438\u043a\u0443, \u0442\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u044d\u0442\u0443 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c. \u0425\u043e\u0442\u044f \u0431\u0443\u0434\u0435\u0442 \u043b\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u2013 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0443 \u043d\u0430\u0441 \u0440\u0430\u0441\u0445\u043e\u0434 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c \u2013 \u0447\u0435\u0440\u043d\u044b\u0439 \u044f\u0449\u0438\u043a. \u0414\u0440\u0443\u0433\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0435\u0434\u0430\u043d\u0438\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u043c\u0438 \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043e \u043d\u0435 \u0431\u044b\u043b\u043e.    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/company\/tiktokcoach\/blog\/204286\/\"> http:\/\/habrahabr.ru\/company\/tiktokcoach\/blog\/204286\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u0421\u0430\u043c\u0430\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430, \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0443\u0441\u0442\u043d\u0430\u044f, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u0430 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u2013 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e(Windows, Linux, Mac) \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043f\u043e\u0434 \u0434\u0435\u0441\u043a\u0442\u043e\u043f \u0438 \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e(Windows, Android, iPhone). \u041f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0438\u043c \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u041e\u0421.<br \/>  \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f <a href=\"http:\/\/www.mono-project.com\/\">Mono<\/a> \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u0441 GUI \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c. \u0418\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u043f\u043e\u0434 .Net(Windows Forms, WPF) \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434 Windows, \u0438 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0431\u044b\u043b \u043f\u0435\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u043f\u044b\u0442 \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Windows Forms. \u041f\u043e\u0434 Linux \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"http:\/\/www.mono-project.com\/GtkSharp\">GtkSharp<\/a>, \u043d\u043e \u0438\u0434\u0435\u044f \u0441\u0442\u0430\u0432\u0438\u0442\u044c Mono \u043d\u0430 Windows \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 .Net \u043c\u043d\u0435 \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u0443\u044e \u041e\u0421.<br \/>  \u0427\u0442\u043e \u0432 \u044d\u0442\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043c\u043e\u0433\u043b\u0430 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0430 .Net(\u0441 \u0443\u043a\u043b\u043e\u043d\u043e\u043c \u043f\u043e\u0434 \u0432\u0435\u0431)? \u0420\u0435\u0448\u0438\u043b\u0438 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c Webkit \u0438 \u043f\u0438\u0441\u0430\u0442\u044c GUI \u043d\u0430 \u0441\u0432\u044f\u0437\u043a\u0435 html-js-css.<br \/>  \u041d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u043c\u044b 2 \u0433\u043e\u0434\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0434\u043b\u044f Windows \u0438 \u0433\u043e\u0434 \u2013 \u043f\u043e\u0434 Linux \u0438 Mac. \u0414\u043e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043f\u043e\u043a\u0430 \u0440\u0443\u043a\u0438 \u043d\u0435 \u0434\u043e\u0448\u043b\u0438.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-204286","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/204286","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=204286"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/204286\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=204286"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=204286"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=204286"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}