What is the correct way to convert the absolute path of the executing script to a URL, in WordPress?

Call get_stylesheet_directory_uri() for the current theme, or get_template_directory_uri() for the parent theme of a child theme, and append your file paths to that.

$url = get_stylesheet_directory_uri() . '/images/my-icon.png';
$url = get_template_directory_uri() . '/images/my-icon.png';

Edit: To determine whether you’re in a plugin, a parent theme or a child theme, compare the folder you’re in (via dirname(__FILE__)) to plugin_dir_path(), get_template_directory() and get_stylesheet_directory() respectively.