рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдФрд░ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдерд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдпрд╛ рдЬрд╛рд╡рд╛ рдХреЗ рддрд╣рдд рдХреБрдЫ рднреА рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдерд╛ред рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдЬреИрд╕реЗ рдХрд┐ рдлреЛрдирдЧреИрдк рдФрд░ рдЕрдиреНрдп, рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдШрдЯрдХ рдореЗрдВ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рд╕рдм реи.реи - рек.рей (рдПрд╕рдбреАрдХреЗ) - рез 2.2) рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рддрд╣рдд рд╣реИред
рдПрдВрдбреНрд░реЙрдЗрдб рдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдХреБрдЫ рдмрд┐рдВрджреБ рд╕реЗ рдФрд░ рдЙрдирдХреЗ рддрд╣рдд рдмреИрд╕рд╛рдЦреА рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЬрд┐рд╕рдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдпрд╣ рд╕рдм рджреЗрдЦрд╛, рдореИрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╣реИрд▓реЛрд╡рд░реНрд▓реНрдб рдХреЗ рдмрд┐рдирд╛ рдирд┐рдХрд▓рд╛, тАЬрдУрдПрдордЬреА! рдЬрд╛рд╡рд╛ тАЭ, рдЖрджрд┐ред
рд╕реНрдХреНрд░реАрди рд░реЛрдЯреЗрд╢рди / рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░рд┐рд╡рд░реНрддрдирдиреЗрдЯрд╡рд░реНрдХ рдкрд╣реБрдВрдЪ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИрд╣рдо рд╕реНрдерд╛рдиреАрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВрдЬрд╛рд╡рд╛ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмреАрдЪ рдХрд╛ рдкреБрд▓рдкреВрд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╡реЗрдмрд╡реНрдпреВ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд╕рдВрд╕рд╛рдзрди (рд╕рдВрдкрддреНрддрд┐) рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╣реИред рдЬреЗрдПрд╕ рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдХреНрдпрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ - рдЬрд╛рд╡рд╛ рдкрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ <=> рдкреБрд▓ рдЬреЗрдПрд╕ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ / рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗред рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреЛ рдкреГрд╖реНрда рдкрд░ "рдЪреБрдкрдЪрд╛рдк" рдЕрдкрд╣рд░рдг рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕реНрдХреНрд░реАрди рд░реЛрдЯреЗрд╢рди
рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ, рдбрд┐рд╡рд╛рдЗрд╕ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрддрд┐рд╡рд┐рдзрд┐ (рдпреВрдЖрдИ) рдХреЗ рдПрдХ
рдордиреЛрд░рдВрдЬрди рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХрд░рддрд╛ рд╣реИред WebView рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдкреГрд╖реНрда рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рднрд░рдирд╛, рд╡рд░реНрддрдорд╛рди рд╕реНрдХреНрд░реЙрд▓ рд╕реНрдерд┐рддрд┐, рдЬреЗрдПрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдЖрджрд┐ рдЦреЛ рдЬрд╛рддреА рд╣реИред
рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, рдкреНрд░рджрд░реНрд╢рди рдХреА рдмрджрд▓рддреА рдбрд┐рдЧреНрд░реА рдФрд░ рдПрд╕рдбреАрдХреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЗрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрд╕рдбреАрдХреЗ рдХреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдк рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ:
рд╣рдореЗрдВ рдЬрд┐рд╕ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд▓рд┐рдП, рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ: "рд╕реНрдХреНрд░реАрдирд╕рд╛рдЗрдЬ | рдУрд░рд┐рдПрдВрдЯреЗрд╢рди" рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред рд╡реЗ рджреЛрдиреЛрдВ, рдЕрдиреНрдпрдерд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рд▓реЗрдЖрдЙрдЯ рдореЗрдВ, рд╣рдо WebView рдХрд╛ рд╡рд░реНрдгрди рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░рд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╣рд╛рдБ рд╣реЛрдЧрд╛, рд╣рдо рд╕реНрдЯрдм рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:
<FrameLayout android:id="@+id/webViewPlaceholder" ... />
рдХреЛрдИ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдирд╣реАрдВ - рдЗрд╕рд╕реЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ :)
рдЕрдм рд╣рдорд╛рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рд╡рд░реНрдЧ рдореЗрдВ:
protected FrameLayout mWebViewPlaceholder;
рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реИ?
рд░реЛрдЯреЗрд╢рди рдФрд░ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп, UI рд╕реЗ WebView рдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ "рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓реЗрдВ"ред рдЙрд╕реА рд╕рдордп, рд╣рдо рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ WebView рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЧрддрд┐рд╡рд┐рдзрд┐ рддрдм рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЬрдм рдЖрдк рд╕рд┐рд╕реНрдЯрдо / рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдореБрдЦреНрдп рд╕реНрдХреНрд░реАрди рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдпрд╛ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЕрдиреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВред
рд╡реИрд╕реЗ, рдпрджрд┐ рдЖрдкрдХреЛ рдкреГрд╖реНрда рддрддреНрд╡реЛрдВ (рд╕рдорд╛рди рдЗрдирдкреБрдЯ) рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЖрдИрдбреА рд╕реМрдВрдкрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛ рдЗрд╕реЗ рдмрдЪрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ред
рдиреЗрдЯрд╡рд░реНрдХ рдкрд╣реБрдВрдЪ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ
рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдмрд╛рд╣рд░реА рд╕рд░реНрд╡рд░ рд╕реЗ WebView рдореЗрдВ рдПрдХ рдкреГрд╖реНрда рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдбрд┐рд╡рд╛рдЗрд╕ (рдПрдпрд░ рдореЛрдб, рд╡рд╛рдИрдлрд╛рдИ рдСрдл ...) рдкрд░ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд┐рдП рдЧрдП рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдмрд╣реБрдд рдордЬрд╝реЗрджрд╛рд░ рд╣реИред рдпрд╣ WebViewClient.onReceivedError рдФрд░ рд╢рдкрде рдЧреНрд░рд╣рдг рдХреЛ рдкрдХрдбрд╝рдиреЗ рд▓рдЧрддрд╛ рд╣реИред рдФрд░ рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╢рд╛рдВрдд рд╣реИ рдФрд░ WebViewClient.onPageFinished рдкрд░ рдХреЙрд▓ рд╣реБрдЖ рд╣реИ, рддреЛ рдкреГрд╖реНрда рд╣рдорд╛рд░реЗ рд╕рд╛рде рд▓реЛрдб рд╣реЛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди 4.3 (sdk 18) onReceivedError рдХреЛ рд▓реЛрдбрд┐рдВрдЧ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ 2
рдорд┐рдирдЯ рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдХреМрди-рд╕реА рд╕рдордп-рд╕реАрдорд╛ рд╕реЗрдЯрд┐рдВрдЧ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдФрд░ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА ... onPageStarted рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕рдм рдХреБрдЫ, 2 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдореМрди ...
рд╕рдорд╛рдзрд╛рди? рдПрдХ рд╕реНрдерд╛рдиреАрдп рд╕рдВрд╕рд╛рдзрди рдЦреЛрд▓реЗрдВ, рдФрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд░реНрд╡рд░ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдкрдВрдк рдХрд░реЗрдВред
рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдорд▓рд╛ рдХреНрдпрд╛ рд╣реИ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ, рд╢рд╛рдпрдж рдЬрдм рдпрд╣ рдХрд╛рдо рдЖрдПредрд╣рдо рд╕реНрдерд╛рдиреАрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ
WebView рдореЗрдВ, рдиреЗрдЯрд╡рд░реНрдХ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рдмрд┐рдирд╛, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЛрдбрдбреЗрдЯрд╛ ("...") рдпрд╛ рд╕реНрдерд╛рдиреАрдп рд╕рдВрд╕рд╛рдзрди loadUrl ("рдлрд╝рд╛рдЗрд▓: /// ...") рдХреЗ рдкрддреЗ рдХреЛ рдкрд╛рд╕ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЛрдбрдбрд╛рдЯрд╛ рдХреЗ рд╕рд╛рде рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ UTF-8 рд╕рд┐рд░рд┐рд▓рд┐рдХ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд▓реЛрдбрдбреЗрдЯрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ 4.1+ рд╕реЗ (4.0 рдореЗрдВ, рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдпрд╛рдж рд╣реИ, рдпрд╣ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реБрдЖ), рдкреГрд╖реНрда рдХреЛ рд╕рд┐рдВрдЧрд▓-рдмрд╛рдЗрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рди рддреЛ рдореЗрдЯрд╛ charset = utf-8, рдФрд░ рди рд╣реА webView.getSettings ()ред SetDefaultTextEncodingName ("utf-8") рдиреЗ рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рд╕рдорд╛рдзрд╛рди? рд▓реЛрдб рд╕реЗ рдлрд╝рд╛рдЗрд▓ рд▓реЛрдб рдХрд░рдХреЗ рд▓реЛрдб рдХрд░реЗрдВред
рдЬрд╛рд╡рд╛ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмреАрдЪ рдХрд╛ рдкреБрд▓
рдорд╛рдирдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдШрдЯрдХ рдореЗрдВ рдПрдХ рдкреГрд╖реНрда рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓
рдПрдХ рдЕрд╕рдВрднрд╡ рдХрд╛рд░реНрдп рд╣реИ ред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рдЬреЗрдПрд╕ рдХреЛрдб рдХреА рдмрд╛рддрдЪреАрдд рд╣реИ, рдФрд░ рджреЛрдиреЛрдВ рдкрдХреНрд╖реЛрдВ рдХреА рдкрд╣рд▓ рдкрд░ред
рдФрд░ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЪреАрдЬ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ - AddJavascriptInterface (рдСрдл рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг):
class JsObject { @JavascriptInterface public String toString() { return "injectedObject"; } } webView.addJavascriptInterface(new JsObject(), "injectedObject"); webView.loadData("", "text/html", null); webView.loadUrl("javascript:alert(injectedObject.toString())");
рд╣рдордиреЗ JS рдФрд░ рдЙрд╕рдХреЗ рд╕рднреА рдХреЗ рд▓рд┐рдП "рдкреБрд▓" рдФрд░ рдЙрд╕рдХрд╛ рдирд╛рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдкреЗрдЬ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрд┐рдирд╛ рд▓реЛрдбрдбреИрдЯрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЕрдЬреАрдм рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛрдиреЗ рддрдХ (рдЖрдк рдПрдХ рдЦрд╛рд▓реА рд▓рд╛рдЗрди рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ) рдЬрдм рддрдХ рдЗрдВрдЯрд░реЗрдХреНрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреЗрдПрд╕ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрд╢рди рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред
рдЬреЗрдПрд╕ рд╕реЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ, рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдореБрдЦреНрдп рд╕рдВрдпреЛрдЧред
рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдПрдореБрд▓реЗрдЯрд░ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ: 4.3 - рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, 4.2 - рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, ... 2.3 - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ (рдУрдПрд╕ рд╕реНрдЯрд╛рд░реНрдЯ рд╕реНрдХреНрд░реАрди рдкрд░ рдХреНрд░реИрд╢) ... рд░реБрдХреЛ, рдХреНрдпрд╛? ... 2.2 - рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ 2.3 - рдкрдкрдбрд╝реА рдХреЗ рд▓рд┐рдПред
рдЬрдм рдЗрдВрдЬреЗрдХреНрд╢рди рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рджреБрд░реНрдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИред рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рддрдХ рдкрд╣реБрдБрдЪ рд╢рд╛рдВрдд рд╣реИред
рдмреИрдХрдЯреНрд░реЗрд╕ рдореЗрдВ "callJNIMethod <>" рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЕрд╡рдХрд╛рд╢ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддреА рд╣реИ ...
рдПрд╕рдУ рдХреЛ рдЧреБрдЧреНрд▓рд┐рдВрдЧ рдФрд░ рдХреЙрдореНрдмрд┐рдВрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдмрдбрд╝реА рд╣реИ рдФрд░ рдкреВрд░реА рд▓рд╛рдЗрди 2.3 рдХреЗ рд▓рд┐рдП 100% рдХреЗ рдХрд░реАрдм рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рд╣реЛрддреА рд╣реИред * (Sdk 9 - 10)ред рдпрд╣ рдХрднреА-рдХрднреА 2.2 (рдПрд╕рдбреАрдХреЗ 8) рдкрд░ рднреА рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреЗрд╡рд▓ рдРрд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рд╕реЗ рдорд┐рд▓рд╛, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдФрд░ рдПрдореБрд▓реЗрдЯрд░ рдФрд░ рд░рд┐рдпрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рджреЛрдиреЛрдВ рдкрд░ред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗрдмрд╡реНрдпреВ рдХреЛ рдЬреЗрдПрд╕ рдЗрдВрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рдЧреИрд░-рд╡реА 8 рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЬрдирддрд╛ рдХреА рдЪреАрдЦ рдФрд░ рдмрдЧ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Google рд╕реЗ рдЕрдиреБрд░реЛрдз 2010 рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдлрд┐рдХреНрд╕ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рд╡рд░реНрд╖реЛрдВ рд╕реЗ, рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рдЙрднрд░реЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ 2.3 рдХреЗ рддрд╣рдд рд╕рдорд╛рдзрд╛рдиред *ред рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛, рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рдиреЗ рд╢рд╛рдк рджрд┐рдпрд╛ рдФрд░ рдкреНрд░рднрд╛рд╡рд┐рдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛, рддреЛ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
1. рдЬрд╛рд╡рд╛ рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВ, рдЖрд▓рдВрдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд:
window.location = 'http://OurMegaPrefix:MethodName:Param0:Param1';
рдлрд┐рд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ
webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (!url.startsWith("OurMegaPrefix")) { return false; }
рдкреГрд╖реНрда рдХреЛ onPageFinished рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЙрд╕ рдЫрджреНрдо рд╡рд╕реНрддреБ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдореЗрдВ рдХреЛрдб рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдмреИрд╕рд╛рдЦреА рд╕рдорд╛рдзрд╛рди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рдирд╣реАрдВ рджреЗрддреА рд╣реИред рдЖрдк рдХреЙрд▓рдмреИрдХ рдХрд╛ рдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ ... рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЪрд▓реЛ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
2. рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ (рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП) рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ: рдкреНрд░реЙрдореНрдкреНрдЯ ()ред рдореБрдЦреНрдп рдмрд╛рдд рдЙрд╕реЗ рдкрдХрдбрд╝рдирд╛ рд╣реИ :)
var res = prompt('OurMegaPrefix:meth:param0:param1');
Res рдореЗрдВ, рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛ рд╕реЗ рдХреЙрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИред
webView.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) { final String prefix = JSAPI.class.getSimpleName(); if (!message.startsWith(prefix)) { return super.onJsPrompt(view, url, message, defaultValue, result); }
рдпрд╣рд╛рдВ JSAPI рдкреНрд░реЙрдХреНрд╕реА рдХреНрд▓рд╛рд╕ рдХрд╛ рдирд╛рдо рд╣реИ (рдКрдкрд░ рдЗрд╕реЗ "JsObject" рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛)ред
рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдзрд┐ рдирд╛рдо рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ JSAPI рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред
var jsapi = new JSAPI();
рд▓реЗрдЦ рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░реЗрдВ:
Method method = JSAPI.class.getMethod(methodName, new Class[] {String.class});
рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдпрд╛ рддреЛ рдмрд╕ рдирд╛рдо рд╕реЗ рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
Method method = null; for (Method meth : JSAPI.class.getMethods()) { if (meth.getName().equals(methodName)) { method = meth; break; } }
рдлрд┐рд░ рд╣рдо рдкрд╛рдпрд╛ рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВ (рдлрд┐рд░, рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг):
method.invoke(jsapi, parameter);
рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ рдРрдбрдЬреИрд╡рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдиреНрдЯрд░рдлреЗрд╕ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдкреВрд░реЗ рдорд╛рдорд▓реЗ рдкрд░ рдЕрдкрдирд╛ рд░реИрдкрд░ рдкреЗрд╢ рдХрд░реВрдВрдЧрд╛ред
рдореИрдВ рдЦреБрдж рдмреИрдХрдПрдВрдб (php, python, bash, C, рдЗрддреНрдпрд╛рджрд┐) рд╣реВрдВ рдФрд░ рдореЗрд░рд╛ JS рдЗрддрдирд╛ рдХреВрд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╢рд░реНрдордирд╛рдХ рди рд╣реЛред рдореИрдВ рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рд╡ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реВрдВрдЧрд╛ :)рддрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, json рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
- JSON.stringify рдФрд░ JSON.parse рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ js рдХреА рддрд░рдл;
- JSONObject рдФрд░ JSONArray рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рд╡рд╛ рдХреА рддрд░рдлред
рдФрд░ DOMContentLoaded рджреНрд╡рд╛рд░рд╛:
if (typeof JSAPI == 'object') { return; } (function(){ var JSAPI = function() { function bridge(func) { var args = Array.prototype.slice.call(arguments.callee.caller.arguments, 0); var res = prompt('JSAPI.'+func, JSON.stringify(args)); try { res = JSON.parse(res); res = (res && res.result) ? res.result : null; } catch (e) { res = null; } return res; } this.getUserAccounts = function() {
рдпрджрд┐ JSAPI рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (addJavascriptInterface рдХреЛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛) - рдореИрдВ рдПрдХ рдЖрд╡рд░рдг рдмрдирд╛рддрд╛ рд╣реВрдВред
рдЖрд╡рд░рдг рдХрд╛ рд╕рд╛рд░ - рд╣рдо рд╕рдВрдХреЗрдд рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ ('JSAPI.getUserAccounts', '[]'), рдЬрд╣рд╛рдБ рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЙрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ json рд╕рд░рдгреА рд╣реИред
рдФрд░ рдкреНрд░реЙрдореНрдкреНрдЯ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ {рдкрд░рд┐рдгрд╛рдо: ANSWER} рд╣рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдм, рдПрдВрдбреНрд░реЙрдЗрдб рдПрд╕рдбреАрдХреЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рд╣рдо рдЕрдкрдиреА рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВ:
var res = JSAPI.getUserAccounts();
рдЬрд╛рд╡рд╛ рдкрдХреНрд╖ рдореЗрдВ:
webView.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
рдФрд░ рд╕реАрдзреЗ рдЙрджрд╛рд╣рд░рдг рдХреА рдЕрдЦрдВрдбрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рд╡рд┐рдзрд┐:
class JSAPI { @JavascriptInterface public String getUserAccounts() { final JSONArray json = new JSONArray(); final String emailPattern = Patterns.EMAIL_ADDRESS.pattern(); final AccountManager am = AccountManager.get(getApplicationContext()); if (am != null) { for (Account ac : am.getAccounts()) { if (!ac.name.matches(emailPattern)) { continue; } final JSONArray item = new JSONArray(); item.put(ac.type); item.put(ac.name); json.put(item); } } return json.toString(); } }
рдпрджрд┐ рд╡рд┐рдзрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рд╣рдореЗрд╢рд╛ рд╕реНрдЯреНрд░реАрдВрдЧ рдХреЛ рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рдЬреЛ рднреА рдкрд░рд┐рдгрд╛рдо рд╣реЛред
рдПрд╕рдбреАрдХреЗ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди @JavcriptcriptInterface рдХреА рдЬрд░реВрд░рдд рд╣реИред рдкреБрд░рд╛рдиреЗ рдореЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд┐рдпрд╛ред
рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдпрд╣ рднреА рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдХреНрд╕рд░ "рдЯреВрдЯреЗ рд╣реБрдП рдПрдВрдбреНрд░реЙрдЗрдб" рдХреЗ рд░реВрдк рдореЗрдВ рдмрд┐рд▓реНрдб рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рд╣реЛрддреА рдереАред VERSION.RELEASE == "2.3"ред рдЦрд░рд╛рдм рдЬрд╛рдБрдЪ, рдмрд┐рд▓реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреЗрд╣рддрд░ред VERSION.RELEASE.startsWith ("2.3")ред рдмреЗрд╣рддрд░ рдЕрднреА рддрдХ, IMHO, рд╕реАрдзреЗ рдПрд╕рдбреАрдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: (Build.VERSION.SDK_INT == 9) || (Build.VERSION.SDK_INT == 10)ред
рдЬреЛ рд▓реЛрдЧ рдЬреЗрдПрд╕ рдЕрд╕реЗрдВрдмрд▓реА (рд╡реА 8 рдкрд░, рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ, рдмрдЧ рдирд╣реАрдВ рдЦреЗрд▓рддрд╛) рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдореИрдВ рдЪрд▓рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ, рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред
рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛ рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдХреЙрд▓: рдЬрдм рдЬрд░реВрд░рдд рд╣реЛ, рдпрд╛ рдХреЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВред
public void callJS(final String jsCode) { runOnUiThread(new Runnable() { @Override public void run() { webView.loadUrl("javascript:" + jsCode); } }); } jsapi.callJS("alert('Hello, Habr!');");
RunJUiThread рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдпрджрд┐ рдХреЙрд▓рдЬ рдЧреИрд░-рдпреВрдЖрдИ рдереНрд░реЗрдб рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рд╣реЛрдЧрд╛)ред
рд▓реЗрдХрд┐рди :) 2.2 рдореЗрдВ, рдЗрд╕рдиреЗ рдореЗрд░реЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд┐рдпрд╛ред рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ,
рд╕рд╣реА рдЕрдзрд┐рдХ рддрд╛рд░реНрдХрд┐рдХ рд╣реЛ рдЧрдпрд╛ред
рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдЬрд╛рд╡рд╛ рдПрдкреНрд▓реАрдХреЗрд╢рди рдХреИрд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ :) рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА рдпрд╛ рдЕрдЪрд╛рдирдХ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрдкрдпреЛрдЧреА рднреАред
рдкреАрдПрд╕ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ 0.2.11 рддрдХ рдмрдврд╝ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк JetBrains рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИред рдЕрдкреНрд░рд┐рдп рджреЛрд╖реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдХрд╛рдлреА рдХрд╛рд░реНрдпрд╛рддреНрдордХред
PPS рдкреНрд░рд╛рдкреНрдд рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдЧрдП рдереЗред