Bug Tracker

Ticket #10470 (closed bug: fixed)

Opened 3 years ago

Last modified 2 years ago

wrap() evaluates scripts

Reported by: nick@… Owned by: gibson042
Priority: low Milestone: 1.9
Component: manipulation Version: 1.6.4
Keywords: Cc:
Blocking: Blocked by: #11795

Description

Calling .wrap() will evaluate any scripts inside the element. This can cause problems when the browser has already run the scripts once. If this isn't considered a bug, it ought to be be mentioned in the documentation for wrap().

Workaround: manually do .remove('script') prior to using .wrap().

Demo:  http://jsfiddle.net/nickh/BQRJt/

Change History

comment:1 Changed 3 years ago by dmethvin

  • Status changed from new to open

comment:2 Changed 3 years ago by nick@…

Regarding the workaround, .remove('script') doesn't seem to work although .find('script').remove() does.

comment:3 Changed 3 years ago by nicholasbs

The only way I can think of to fix this is to add an optional argument to domManip (the function that wrap ultimately relies upon) and then do something like:

if ( !ignoreScripts && scripts.length ) {
  jQuery.each( scripts, evalScript );
}

Does this seem reasonable? If so, I'm happy to write a patch.

comment:4 Changed 3 years ago by pavol.eichler

Actually, it looks like wrap first reloads the script tags and only then removes them.

If you wrap an element containing a script element once, it is executed. You can now inspect the DOM and will find out the script element is missing. Thus, if you try to wrap the same element once more, the script is not executed.

Is there any reason to execute the scripts when the first wrap() is called, if it is always removed from the DOM by the same call?

Check:
 http://jsfiddle.net/GYB76/1/
Tested in FF 8, Chrome 15, jQuery 1.7.1 and jQuery 1.4.1

comment:5 Changed 2 years ago by dmethvin

  • Component changed from unfiled to manipulation

comment:6 Changed 2 years ago by mikesherov

  • Owner set to mikesherov
  • Priority changed from undecided to low
  • Status changed from open to assigned
  • Milestone changed from None to 1.8.2

comment:7 Changed 2 years ago by mikesherov

  • Milestone changed from 1.8.2 to 1.9

comment:8 Changed 2 years ago by mikesherov

  • Blocked by 11795 added

comment:9 Changed 2 years ago by mikesherov

  • Owner changed from mikesherov to gibson042

comment:10 Changed 2 years ago by gibson042

#9134 is a duplicate of this ticket.

comment:12 Changed 2 years ago by Richard Gibson

  • Status changed from assigned to closed
  • Resolution set to fixed

Fix #11795, #10470: keep scripts in DOM; execute only on first insertion. Close gh-864.

Changeset: e889134058232c5e19156353c5fc3bf3b4915a94

Note: See TracTickets for help on using tickets.