Vm2: рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ vm2 рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди

рдХреЛ рдирд┐рд░реНрдорд┐рдд 31 рдЬреБрд▓ре░ 2017  ┬╖  15рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: patriksimek/vm2

рд╢рд╛рдЦрд╛: https://github.com/patriksimek/vm2/tree/feature-browsers
рдкреБрд╕реНрддрдХрд╛рд▓рдп: https://github.com/patriksimek/vm2/blob/feature-browsers/dist/vm2.js

рдкреНрд░рдпреЛрдЧ

<script src="vm2.js"></script>
<script>
    const vm = new vm2.VM();
    alert(vm.run('Math.random()'));
</script>

рдореБрджреНрджреЗ

  • рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ window.top ред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

  • рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ NodeVM рдирд┐рдХрд╛рд▓реЗрдВред
  • рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрдмрдВрдзрд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ BrowserVM рдЬреЛрдбрд╝реЗрдВред
  • рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░реАрдХреНрд╖рдгред
feature request help wanted

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ vm2 рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╢реЙрдЯ рджреВрдВрдЧрд╛ред

рд╕рднреА 15 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреБрдЫ рд╣рдж рддрдХ рд╣реИрдХреА рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрддреНрддрд┐ рдкрд╣реБрдВрдЪ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдПрд╕рдЯреА рдкреБрдирд░реНрд▓реЗрдЦрди рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, let x = foo.bar рдХреЛ let x = (x => (x == window.top) ? (some patch here) : x)(foo.bar) рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣рд╛рдВ рдПрдПрд╕рдЯреА рдкреБрдирд░реНрд▓реЗрдЦрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬрд╣рд╛рдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдиреЛрдбреНрд╕ рдЗрд╕ рддрд░рд╣ рдХреЗ рдиреЛрдбреНрд╕ рдореЗрдВ рд▓рдкреЗрдЯреЗ рдЬрд╛рддреЗ рд╣реИрдВред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдмрд╣реБрдд рд╣реЗрд╡реАрд╡реЗрдЯ рд╣реИ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЬреЗрдПрд╕ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдпрд╛ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рдВрд╕ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИ (рдЬреИрд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рд╡реИрд░рд┐рдПрдмрд▓ рдФрд░ рдкрд╛рд░реНрд╕ рд╕рд╛рдордЧреНрд░реА)ред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реЛрдЧрд╛ред

document рдФрд░ top рдЬреИрд╕реЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рдХрд╛рд░рдг рд╡реИрд░рд┐рдПрдмрд▓ рд╣рдЯрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рдФрд░ рди рд╣реА рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@ io4 , рдПрдПрд╕рдЯреА рдкреБрдирд░реНрд▓реЗрдЦрди рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди, eval рдФрд░ рдЬреИрд╕реЗ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдореЗрдВ "рд╕рдВрдХрд▓рди рд╕рдордп" рджреЛрдиреЛрдВ рдкрд░ рдПрдХ рднрд╛рд░реА рдкреНрд░рджрд░реНрд╢рди рд╣рд┐рдЯ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рд╕рдВрдХреЗрдд рдХреА рдПрдХ рдкрд░рдд рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХреГрдкрдпрд╛ рдмрдВрдж рди рдХрд░реЗрдВ, рдпрд╣ рдПрдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдореБрджреНрджрд╛ рд╣реИред

рдореИрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ vm2 рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╢реЙрдЯ рджреВрдВрдЧрд╛ред

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

рд╕реНрдерд┐рддрд┐ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╡реЗрдм рд╡рд░реНрдХрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╣реЛрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдореЗрдореЛрд░реА рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╡рд╛рд▓реЗ рдЖрдИрдлреНрд░реЗрдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдВ рднреА рдХреЛрдИ рд╕рдлрд▓рддрд╛ рдирд╣реАрдВ рдорд┐рд▓реАред allow-same-origin рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд┐рдирд╛, vm2 рдкреНрд░рд╛рд░рдВрдн рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЙрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рд╕реЗ, рдореИрдВ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рд╡рд┐рдВрдбреЛ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдореИрдВ рд╣рд╛рд░ рдирд╣реАрдВ рдорд╛рди рд░рд╣рд╛ :)

рдЗрд╕рдиреЗ рдЖрдкрдХреЛ рдХрд┐рд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐ рджреА? рдХреНрдпрд╛ рдЗрд╕реЗ рдПрдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА? рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдХрдореА рдереА? рдХреЛрдИ рднреА рдбреЗрдЯрд╛ рдЬрд┐рд╕реЗ iframes рдХреЗ рдмреАрдЪ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

227 рд░реБрдЪрд┐ рдХрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ Realms рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реИрдВрдбрдмреЙрдХреНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдореИрдВрдиреЗ рдЙрд╕реА рдЪрд╛рд▓ рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдХреНрд╖реЗрддреНрд░-рд╢рд┐рдо рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: https://github.com/XmiliaH/vm2/blob/feature-browsers/lib/vm.js
рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рд╡реАрдПрдо рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕рдЦреНрдд рдореЛрдб рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред

@patriksimek window.top рдореБрджреНрджреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд/рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдлреЗрдВрдХ рдФрд░ рддреНрд░реБрдЯрд┐) рдХреЛ рдорд╛рд░ рд╕рдХрддреЗ рд╣реИрдВ? рддреЛ, рдЧреБрдгреЛрдВ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рдкреЗрдЯреЗрдВ

рд╢рд╛рдЦрд╛: https://github.com/patriksimek/vm2/tree/feature-browsers
рдкреБрд╕реНрддрдХрд╛рд▓рдп: https://github.com/patriksimek/vm2/blob/feature-browsers/dist/vm2.js

рдкреНрд░рдпреЛрдЧ

<script src="vm2.js"></script>
<script>
    const vm = new vm2.VM();
    alert(vm.run('Math.random()'));
</script>

рдореБрджреНрджреЗ

  • рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ window.top ред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

  • рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ NodeVM рдирд┐рдХрд╛рд▓реЗрдВред
  • рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ BrowserVM рдЬреЛрдбрд╝реЗрдВред
  • рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░реАрдХреНрд╖рдгред

рдореБрдЭреЗ window рдпрд╛ window.top рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рджреЗрдЦрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдлреЗрдВрдХрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдирдорд╕реНрддреЗ
рдореБрдЭреЗ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ
рдХреНрдпрд╛ рдХреЛрдИ рдХреГрдкрдпрд╛ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдзрдиреНрдпрд╡рд╛рдж

рдирдорд╕реНрддреЗ
рдореБрдЭреЗ рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ
рдХреНрдпрд╛ рдХреЛрдИ рдХреГрдкрдпрд╛ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдзрдиреНрдпрд╡рд╛рдж

рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рдирд╛: рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ module.exports = vm2; рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

wojpawlik picture wojpawlik  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

CapacitorSet picture CapacitorSet  ┬╖  13рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

somebody1234 picture somebody1234  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

keyosk picture keyosk  ┬╖  64рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

wintertime-inc picture wintertime-inc  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ