рд╕реА # рдФрд░ рд╡реЗрдм рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдореЗрдВ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо GUI

рдмрд╣реБрдд рдкрд╣рд▓реЗ рдЙрддреНрдкрд╛рдж рд╡рд┐рдирд┐рд░реНрджреЗрд╢, рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдореМрдЦрд┐рдХ, рдореЗрдВ рдПрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА - рдбреЗрд╕реНрдХрдЯреЙрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо (рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕, рдореИрдХ) рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдФрд░ рдореЛрдмрд╛рдЗрд▓ рдХрд╛ рдПрдХ рд╣рд▓реНрдХрд╛ рд╕рдВрд╕реНрдХрд░рдг (рд╡рд┐рдВрдбреЛрдЬ, рдПрдВрдбреНрд░реЙрдЗрдб, рдЖрдИрдлреЛрди)ред рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ, рддреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рднрд┐рдиреНрди рдУрдПрд╕ рдХреЗ рд╕рдорд╛рди рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореЛрдиреЛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж , рд╣рдо рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреАрдпреВрдЖрдИ рдХреЗ рд╕рд╛рде рд╕рд╡рд╛рд▓ рдЦреБрд▓рд╛ рд░рд╣рддрд╛ рд╣реИред .Net (рд╡рд┐рдВрдбреЛрдЬ рдлреЙрд░реНрдо, рдбрдмреНрд▓реНрдпреВрдкреАрдПрдл) рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдВ рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рдВрдбреЛрдЬ рдПрд╕рдПрд╕ рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рджреБрдЦрдж рдЕрдиреБрднрд╡ рдерд╛ред рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд, рд╣рдо GtkSharp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ .Net рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдореЛрдиреЛ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╣реВрдВред рдирддреАрдЬрддрди, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд┐рдЦрдирд╛ рдФрд░ рдмрдирд╛рдП рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ .Net рдЯреАрдо (рд╡реЗрдм тАЛтАЛрдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде) рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреА рд╣реИ? рд╣рдордиреЗ Webkit рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдФрд░ html-js-css рдмрдВрдбрд▓ рдкрд░ рдПрдХ GUI рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдЖрдЬ, рд╣рдо рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП 2 рд╕рд╛рд▓ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд▓ рдХреЗ рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЕрднреА рддрдХ рд╣рд╛рде рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗ рд╣реИрдВред


рдХреНрдпреЛрдВ?


рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рддрд╣рдд рд╕рдорд╛рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╕рдордп рдлреЛрдВрдЯ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╕рдордп рдХреЗрд╡рд▓ рдорд╛рдореВрд▓реА рдЕрдВрддрд░ рд╕рдВрднрд╡ рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рд╣рдореЗрд╢рд╛ рд▓реЗрдЖрдЙрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИред
рдПрдХ рдУрдПрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ред рдЕрдиреБрднрд╡рдЬрдиреНрдп рд░реВрдк рд╕реЗ, рд╣рдордиреЗ рдпрд╣ рдмрддрд╛рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рддрд╣рдд рдФрд░ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рддрд╣рдд рдХрднреА-рдХрднрд╛рд░ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд┐рд▓реАрдЬ рд╕реЗ рдкрд╣рд▓реЗред
рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдХреА рд╕рд╛рд░реА рд╢рдХреНрддрд┐ред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реИ рдЕрдЧрд░ рдЯреАрдо рдореЗрдВ рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╣реЛрддреЗ рд╣реИрдВред рдЖрдк html5, css3, рдкрд░рд┐рдЪрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реИрд╕реЗ, рд╣рдо рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд▓реЛрдХрдкреНрд░рд┐рдп рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдЬреЗрдПрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред
рдлреНрд░рдВрдЯрдПрдВрдб рдФрд░ рдмреИрдХрдПрдВрдб рдореЗрдВ рдкреГрдердХреНрдХрд░рдгред рдПрдкрд┐ рдХреЛ рд╕рдордиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдкреНрд░рд╕реНрддреБрддрд┐ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдПрдХ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ рдЬреЛ "рд╕рд░реНрд╡рд░" рдХреЗ рд╕рд╛рде рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рд╣рдо рдЗрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рдХреНрд░реЛрдо рдореЗрдВ рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рдбреАрдмрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрдерд╛рдиреАрдп рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирдХрд▓реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рд╡рд╛рд▓реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬрд┐рдиреНрд╣реЗрдВ рдбреЛрдо рдФрд░ рдХрдВрд╕реЛрд▓ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╡реЗ рдЕрдкрдиреЗ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдлрд╛рдпрд░рдмрдЧ рд▓рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдЙрддреНрд╕рд╛рд╣ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдХрдареЛрд░ рд░реЛрдЬрдорд░реНрд░рд╛ рдХреЗ рдЬреАрд╡рди рдХреЛ рдЙрдЬреНрдЬреНрд╡рд▓ рдХрд░рддреЗ рд╣реИрдВред

рдХреИрд╕реЗ?


рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдореВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЬреАрдпреВрдЖрдИ рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡ рд╣реЛрддрд╛ рд╣реИ - рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░, рдкреВрд░реА рд╡рд┐рдВрдбреЛ рддрдХ рдлреИрд▓рд╛ рд╣реБрдЖред
рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ HTML рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, js-C # рдФрд░ C # -js рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЦреЛрдЬреЗрдВред рдХреЙрд▓ рдореЗрдВ рдЕрдВрддрд░ рдЕрдЬреАрдм рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рд░рд▓ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реИ - рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рддреА рд╣реИред

рдореИрдХ OSX

рдПрдХ рдЦрд╕рдЦрд╕ тАЛтАЛрдХреЗ рддрд╣рдд рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ рдЗрд╕рд▓рд┐рдП, рд╣рдо рдореЛрдиреЛрдорд╛рдХ рдФрд░ рдПрдХ рдорд╛рдирдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд▓рд╛рдЗрд╕реЗрдВрд╕ рдореЗрдВ рдПрдХ рдкрдХрдбрд╝ рд╣реИред рдЖрдк рдореЛрдиреЛ рдХреЗ рдмрд┐рдирд╛ рдЖрд╡реЗрджрди рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реНрд╡рдпрдВ рдореЛрдиреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди AppStore рдореЗрдВ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред рдпрджрд┐ рд╣рдо рдЖрд╡реЗрджрди рдореЗрдВ рдореЛрдиреЛ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ Xamarin.Mac рдЦрд░реАрджрдирд╛ рд╣реЛрдЧрд╛ , рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдХрдВрдкрдиреА рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ 300 рдпрд╛ 1000 рдбреЙрд▓рд░ рдЦрд░реНрдЪ рд╣реЛрдВрдЧреЗред
рдЦрд╕рдЦрд╕ рдХреЗ рддрд╣рдд рд╣рдореЗрдВ рд╕рдмрд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреЛрдб рдорд┐рд▓рд╛ред рдХреЗрд╡рд▓ рдЧреИрд░-рд╕рд╣рдЬ рд╕реНрдерд╛рди js рд╕реЗ C # рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИред
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ js C # рд╕реЗ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдердбреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХреЗрдВред рдЗрдВрдЯрд░реИрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ:
webView.WindowScriptObject.SetValueForKey(this, new NSString("interaction")); 

рд╣рдо рддрд░реАрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕рдХреЛ js рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
  [Export("callFromJs")] public void CallFromJs(NSString message) { CallJs("showMessage", message + "   C#"); } [Export ("isSelectorExcludedFromWebScript:")] public static bool IsSelectorExcludedFromScript(MonoMac.ObjCRuntime.Selector sel) { if (sel.Name == "callFromJs") return false; return true; //      } 

рдЕрдм js рдореЗрдВ рд╣рдо callFromJs рд╡рд┐рдзрд┐ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ:
  window.interaction.callFromJs('  js.'); 

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдкреВрд░реА рд╕реВрдЪреА
  public partial class MainWindowController : MonoMac.AppKit.NSWindowController { /*  */ //  xib(nib) ,      UI   public override void AwakeFromNib () { base.AwakeFromNib (); //     js    C#.   interaction // window.interaction.callFromJs(param1, param2, param3) -    js. webView.WindowScriptObject.SetValueForKey(this, new NSString("interaction")); webView.MainFrame.LoadHtmlString (@" <html> <head></head> <body id=body> <h1></h1> <button id=btn> C#</button> <p id=msg></p> <script> function buttonClick() { interaction.callFromJs('  js.'); } function showMessage(msg) { document.getElementById('msg').innerHTML = msg; } document.getElementById('btn').onclick = buttonClick; </script> </body> </html>", null); } //    ,       js [Export ("isSelectorExcludedFromWebScript:")] public static bool IsSelectorExcludedFromWebScript(MonoMac.ObjCRuntime.Selector aSelector) { if (aSelector.Name == "callFromJs") return false; return true; //      } [Export("callFromJs")] public void CallFromJs(NSString message) { CallJs("showMessage", new NSObject[] { new NSString(message + "   C#") }); } public void CallJs(string function, NSObject[] arguments) { this.InvokeOnMainThread(() => { webView.WindowScriptObject.CallWebScriptMethod(function, arguments); }); } } 


рдЬреАрдердм рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг ред
рдЬрдм рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рддреЛ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╡реАрдбрд┐рдпреЛ рдХреЛ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рдерд╛: "рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛрдб рдореЗрдВ WebView рдХрд╛ рд▓рд┐рдВрдХ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВред"


рдЙрдмрдВрдЯреВ

рдореЛрдиреЛ рдХреЗ рддрд╣рдд, рд╣рдо рд╡реЗрдмрдХрд┐рдЯ-рд╢рд╛рд░реНрдк рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЧреИрд░-рд╕рд╣рдЬ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдзреАрд░реЗ-рдзреАрд░реЗ рдмрдврд╝ рд░рд╣реА рд╣реИред
J # рд╕реЗ C # рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХреНрд░рдордг рдХреЛ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВред
  browser.NavigationRequested += (sender, args) => { var url = new Uri(args.Request.Uri); if (url.Scheme != "mp") { //mp - myprotocol. //     . //        return; } var parameters = System.Web.HttpUtility.ParseQueryString(url.Query); handlers[url.Host.ToLower()](parameters); //    browser.StopLoading(); }; 

рдЬреЗ рдПрд╕ рд╕реЗ рдХреЙрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
  window.location.href = 'mp://callFromJs?msg=  js.'; 

рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдЯрд╛рдЗрдЯрд▓рдЪреИрдирдб рдЗрд╡реЗрдВрдЯ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред
Js рдореЗрдВ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рд╢реАрд░реНрд╖рдХ рд╕реЗрдЯ рдХрд░реЗрдВ:
  document.title = JSON.stringify({ method: 'callFromJs', arguments: { msg: '  js'} }); 

C # рдореЗрдВ, TitleChanged рдЗрд╡реЗрдВрдЯ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рд╢реАрд░реНрд╖рдХ рдХреЛ рдбрд┐рд╕реЗрд░реНрдмрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд┐рдЫрд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддрд░рд╣, рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред

рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ WebKit рдЖрд╡рд░рдг рдореЗрдВ, рдХрд┐рд╕реА рднреА js рдХреЛрдб рдХреЛ C # рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ C # рд╕реЗ js рдХреЙрд▓ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
  public void CallJs(string function, object[] args) { // javascript var js = string.Format(@" {0}.apply(window, {1}); ", function, new JavaScriptSerializer().Serialize(args)); Gtk.Application.Invoke(delegate { browser.ExecuteScript(js); }); } 

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдШреЛрд╖рд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдкреВрд░реА рд╕реВрдЪреА
  public partial class MainWindow: Gtk.Window { private Dictionary<string, Action<NameValueCollection>> 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 () { //       js handlers = new Dictionary<string, Action<NameValueCollection>> { { "callfromjs", nv => CallJs("showMessage", new object[] { nv["msg"] + "   #" }) } }; browser = new WebView (); browser.NavigationRequested += (sender, args) => { var url = new Uri(args.Request.Uri); if (url.Scheme != "mp") { //mp - myprotocol. //     . //        return; } var parameters = System.Web.HttpUtility.ParseQueryString(url.Query); handlers[url.Host.ToLower()](parameters); //    browser.StopLoading(); }; browser.LoadHtmlString (@" <html> <head></head> <body id=body> <h1></h1> <button id=btn> C#</button> <p id=msg></p> <script> function buttonClick() { window.location.href = 'mp://callFromJs?msg=  js.'; } function showMessage(msg) { document.getElementById('msg').innerHTML = msg; } document.getElementById('btn').onclick = buttonClick; </script> </body> </html> ", null); this.Add (browser); } public void CallJs(string function, object[] args) { var js = string.Format(@" {0}.apply(window, {1}); ", function, new JavaScriptSerializer().Serialize(args)); Gtk.Application.Invoke(delegate { browser.ExecuteScript(js); }); } } 


рдЬреАрдердм рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг ред

рд╡рд┐рдВрдбреЛрдЬ

рд╣рдо рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдореБрдЦреНрдп рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред
рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧреА рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╣реА рд╡рд┐рд╡рд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЗрд╕ рд╕рдордп рдХреЗ рджреМрд░рд╛рди, рдХреБрдЫ рднреА рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реИред рдХреБрдЫ рд╣рдж рддрдХ, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд▓реЗрдЦ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рд╣реИрдВ рдЬреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдУрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред
рдореИрдВ рд╕рд┐рд░реНрдл рдЬреАрддреВрдм рдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝реВрдВрдЧрд╛ред

рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ

рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдРрд╕рд╛ рджрд┐рд▓рдЪрд╕реНрдк рддрд░реАрдХрд╛ рдЗрд╕рдХреА рдЕрдкрдиреА рдЦрд╝рд╛рд╕рд┐рдпрдд рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рд╣рдорд╛рд░реЗ рд░рд╛рд╕реНрддреЗ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдордп рдХреА рдЦрдкрддред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рддреИрдпрд╛рд░реА рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ: рд╕рд╛рд╕, рдмреЙрдиреНрдбрд┐рдВрдЧ рдлрд╛рдЗрд▓реЗрдВ, рдорд┐рдирд┐рдлрд┐рдХреЗрд╢рдиред рд▓реЗрдХрд┐рди рдЬрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рд░ рдмрд╛рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрд╡рдпрдВ рд╣реА рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рд╕реНрдореГрддрд┐ рдХреА рдЦрдкрдд рдореЗрдВ рд╡реГрджреНрдзрд┐ред рдпрд╣ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдЧрдВрднреАрд░ рдорд╛рдЗрдирд╕ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ 50 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд░реИрдо рдХреА рдЦрдкрдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рддрд░рдл, рдпрд╣ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд▓рдХреНрд╖рд┐рдд рджрд░реНрд╢рдХреЛрдВ рдореЗрдВ рдкреБрд░рд╛рдиреЗ рдЙрдкрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп рддрдХрдиреАрдХ рдкрд░ рд▓рд╛рдЧреВ рд╕рдорд╛рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрдо рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░реЗрдЧрд╛ред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд рд╣реИ - рдПрдХ рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕ред рд╣рдордиреЗ рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓реАрдЧрдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдпрд╛ рдкреНрд░рджрд░реНрд╢рди рдмреВрдВрджреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИред

Source: https://habr.com/ru/post/In204286/


All Articles