var idoc = iframe.contentDocument || iframe.contentWindow.document; // проверь iframe.contentWindow - вроде как это обращение к объекту window iframe'а
define('URL_SHIFT', 2);
$str = '/catalogsds/tv/audio/black_audio/';
$urlPaths = preg_split('/\//', $str, -1, PREG_SPLIT_NO_EMPTY);
$urlPaths[count($urlPaths) - URL_SHIFT] = $urlPaths[count($urlPaths) - URL_SHIFT] . '_m';
$output = '/' . implode('/', $output) . '/';
Если рассмотреть самую банальную причину: у тебя тег script стоит выше (возможно в head), чем твой элемент с id="spiderChart"
Поэтому либо в скрипте добавляешь DOMContentLoaded (погугли), либо перемести тег в конец body
если не сработает - выкладывай код в песочницу