阅读:3008回复:5
请教关于新浪视频的老问题
请问怎样才可以看新浪视频?记得好像以前有一个greasemonkey的插件可以实现,但是现在找不到相关的内容了,麻烦解答一下,谢谢!
|
|
1楼#
发布于:2007-04-19 14:08
那个对新版新浪视频好像无效了。
// ==UserScript== // @name Sina Video // @author sunwan // @e-mail bws@cnnj.8866.org // @version 0.1.5 // @description Show video in sina.com.cn // @namespace http://www.cnnj.8866.org/mozilla/greasemonkey/ // @include http://*.sina.com.cn/* // ==/UserScript== /* * JScript.encode decoder * modified from scrdec18.c. * scrdec1x.c is copyright(c) Mr.Brownstone <mrbrownstone@virtualconspiracy.com> * http://www.virtualconspiracy.com/scrdec.html */ function JScriptDecoder() { this.init(); } JScriptDecoder.prototype = { STATE_COPY_INPUT: 100, STATE_READLEN: 101, STATE_DECODE: 102, STATE_UNESCAPE: 103, pick_encoding: [ 1, 2, 0, 1, 2, 0, 2, 0, 0, 2, 0, 2, 1, 0, 2, 0, 1, 0, 2, 0, 1, 1, 2, 0, 0, 2, 1, 0, 2, 0, 0, 2, 1, 1, 0, 2, 0, 2, 0, 1, 0, 1, 1, 2, 0, 1, 0, 2, 1, 0, 2, 0, 1, 1, 2, 0, 0, 1, 1, 2, 0, 1, 0, 2 ], rawData: [ 0x64,0x37,0x69, 0x50,0x7E,0x2C, 0x22,0x5A,0x65, 0x4A,0x45,0x72, 0x61,0x3A,0x5B, 0x5E,0x79,0x66, 0x5D,0x59,0x75, 0x5B,0x27,0x4C, 0x42,0x76,0x45, 0x60,0x63,0x76, 0x23,0x62,0x2A, 0x65,0x4D,0x43, 0x5F,0x51,0x33, 0x7E,0x53,0x42, 0x4F,0x52,0x20, 0x52,0x20,0x63, 0x7A,0x26,0x4A, 0x21,0x54,0x5A, 0x46,0x71,0x38, 0x20,0x2B,0x79, 0x26,0x66,0x32, 0x63,0x2A,0x57, 0x2A,0x58,0x6C, 0x76,0x7F,0x2B, 0x47,0x7B,0x46, 0x25,0x30,0x52, 0x2C,0x31,0x4F, 0x29,0x6C,0x3D, 0x69,0x49,0x70, 0x3F,0x3F,0x3F, 0x27,0x78,0x7B, 0x3F,0x3F,0x3F, 0x67,0x5F,0x51, 0x3F,0x3F,0x3F, 0x62,0x29,0x7A, 0x41,0x24,0x7E, 0x5A,0x2F,0x3B, 0x66,0x39,0x47, 0x32,0x33,0x41, 0x73,0x6F,0x77, 0x4D,0x21,0x56, 0x43,0x75,0x5F, 0x71,0x28,0x26, 0x39,0x42,0x78, 0x7C,0x46,0x6E, 0x53,0x4A,0x64, 0x48,0x5C,0x74, 0x31,0x48,0x67, 0x72,0x36,0x7D, 0x6E,0x4B,0x68, 0x70,0x7D,0x35, 0x49,0x5D,0x22, 0x3F,0x6A,0x55, 0x4B,0x50,0x3A, 0x6A,0x69,0x60, 0x2E,0x23,0x6A, 0x7F,0x09,0x71, 0x28,0x70,0x6F, 0x35,0x65,0x49, 0x7D,0x74,0x5C, 0x24,0x2C,0x5D, 0x2D,0x77,0x27, 0x54,0x44,0x59, 0x37,0x3F,0x25, 0x7B,0x6D,0x7C, 0x3D,0x7C,0x23, 0x6C,0x43,0x6D, 0x34,0x38,0x28, 0x6D,0x5E,0x31, 0x4E,0x5B,0x39, 0x2B,0x6E,0x7F, 0x30,0x57,0x36, 0x6F,0x4C,0x54, 0x74,0x34,0x34, 0x6B,0x72,0x62, 0x4C,0x25,0x4E, 0x33,0x56,0x30, 0x56,0x73,0x5E, 0x3A,0x68,0x73, 0x78,0x55,0x09, 0x57,0x47,0x4B, 0x77,0x32,0x61, 0x3B,0x35,0x24, 0x44,0x2E,0x4D, 0x2F,0x64,0x6B, 0x59,0x4F,0x44, 0x45,0x3B,0x21, 0x5C,0x2D,0x37, 0x68,0x41,0x53, 0x36,0x61,0x58, 0x58,0x7A,0x48, 0x79,0x22,0x2E, 0x09,0x60,0x50, 0x75,0x6B,0x2D, 0x38,0x4E,0x29, 0x55,0x3D,0x3F ], init: function() { this.transformed = this.digits = []; for (var i=0; i<3; i++) this.transformed[i] = []; for (var i=31; i<=126; i++) for (var j=0; j<3; j++) this.transformed[j][this.rawData[(i-31) * 3 + j]] = (i==31) ? 9 : i; for (var i=0; i<26; i++) { this.digits["A".charCodeAt(0)+i] = i; this.digits["a".charCodeAt(0)+i] = i + 26; } for (var i=0; i<10; i++) this.digits["0".charCodeAt(0)+i] = i + 52; this.digits[0x2b] = 62; this.digits[0x2f] = 63; }, unescape: function(aChar) { var escapes = "#&!*$"; var escaped = "\r\n<>@"; if (aChar.charCodeAt(0) > 126) return aChar; var index = escapes.indexOf(aChar); if (index != -1) return escaped.substr(index, 1); return "?"; }, decodeBase64: function(sData) { var val = 0; val += (this.digits[sData.substr(0,1).charCodeAt(0)] << 2); val += (this.digits[sData.substr(1,1).charCodeAt(0)] >> 4); val += (this.digits[sData.substr(1,1).charCodeAt(0)] & 0xf) << 12; val += ((this.digits[sData.substr(2,1).charCodeAt(0)] >> 2) << 8); val += ((this.digits[sData.substr(2,1).charCodeAt(0)] & 0x3) << 22); val += (this.digits[sData.substr(3,1).charCodeAt(0)] << 16); return val; }, decode: function(sData) { var marker = "#@~^"; var sIndex = 0; var index = -1; var unEcdIndex = 0; var aChar = null; var ecdLen = 0; var unEcdLen = 0; var state = this.STATE_COPY_INPUT; var unEcdStr = ""; while (state) { switch (state) { case this.STATE_COPY_INPUT: index = sData.indexOf(marker, sIndex); if (index != -1) { unEcdStr += sData.substring(sIndex, index); index += marker.length; state = this.STATE_READLEN; } else { unEcdStr += sData.substr(sIndex, sData.length); state = 0; } break; case this.STATE_READLEN: ecdLen = sData.substr(index, 6); unEcdLen = this.decodeBase64(ecdLen); index += 8; state = this.STATE_DECODE; break; case this.STATE_DECODE: if (!unEcdLen) { sIndex = index + "f28AAA==^#~@".length; unEcdIndex = 0; state = this.STATE_COPY_INPUT; state = 0; break; } aChar = sData.substr(index, 1); if (aChar == "@") state = this.STATE_UNESCAPE; else { if (aChar.charCodeAt(0) < 0xFF) { unEcdStr += String.fromCharCode(this.transformed[this.pick_encoding[unEcdIndex%64]][aChar.charCodeAt(0)]); unEcdIndex++; } else { unEcdStr += aChar; } index++; unEcdLen--; break; } case this.STATE_UNESCAPE: unEcdStr += this.unescape(sData.substr(++index, 1)); index++; unEcdLen -=2; unEcdIndex++; state = this.STATE_DECODE; break; } } return unEcdStr; } } // end decoder var configUseBroadFile = GM_getValue("configUseBroadFile", true); var configStopAutoStart = GM_getValue("configStopAutoStart", true); function saveConfig1() { GM_setValue("configUseBroadFile", !GM_getValue("configUseBroadFile",true)); window.location.reload(); } function saveConfig2() { GM_setValue("configStopAutoStart", !GM_getValue("configStopAutoStart",true)); window.location.reload(); } if (configUseBroadFile) { GM_registerMenuCommand(" (?q髧?, saveConfig1 ); mediaFile = "broadFile"; } else { GM_registerMenuCommand(" (?q髧?, saveConfig1 ); mediaFile = "narrowFile"; } if (configStopAutoStart) { GM_registerMenuCommand(" 乥戗?", saveConfig2 ); autoStart = "0"; } else { GM_registerMenuCommand(" 乥戗?", saveConfig2 ); autoStart = "1"; } var mediaFile, autoStart; var hasVideoPlayer = hasRadio = hasMediaFile = hasMoreMedia = needReplace = find = false; function findPlayer() { var src, text; var sc = document.getElementsByTagName("script"); for (var i = 0; i < sc.length; i++) { src = sc[i].getAttribute("src"); if (src && !hasVideoPlayer && /(?:Media|Audio)Player\.js$/.test(src)) { sc[i].id = "greasemonkey_sinavideo"; hasVideoPlayer = true; findMoreMedia(sc[i]); break; } else if (src && !hasRadio && /radiolist\.js$/.test(src)) { hasRadio = true; break; } else if (sc[i].getAttribute("language") && sc[i].getAttribute("language").toLowerCase() == 'jscript.encode') { text = decoder.decode(getScriptText(sc[i])); if (text.indexOf('var LINK = new Array("') > -1) { reloadAudioPlayer(sc[i], text); break; } } } } function findMoreMedia(aNode) { var tr = aNode.parentNode; while (tr && tr.nodeName != "TR") tr = tr.parentNode; if (!tr) return; var nextTr = tr.nextSibling; while (nextTr && nextTr.nodeName != "TR") nextTr = nextTr.nextSibling; if (!nextTr) return; var links = nextTr.getElementsByTagName("a"); var href; for (var i = 0; i < links.length; i++) { href = links[i].href; if (href && /javascript:Chg(?:BN|Video)\([^\)]+\)/.test(href)) { hasMoreMedia = true; break; } } } function findMediaFile() { var text; var sc = document.getElementsByTagName("script"); for (var i = 0; i < sc.length; i++) { if (sc[i].getAttribute("language") && sc[i].getAttribute("language").toLowerCase() == 'jscript.encode') { text = decoder.decode(getScriptText(sc[i])); needReplace = true; } else text = getScriptText(sc[i]); if (!hasMediaFile && (text.indexOf("var vWidth =") > -1 || text.indexOf("var broadFile =") > -1)) { if (text.indexOf("broadFile") == -1) { text += 'var broadFile = list[0][0];var narrowFile = list[0][1];'; needReplace = true; } hasMediaFile = true; if (!hasMoreMedia) find = true; } else if (text.indexOf('bvideo[1]="') > -1) { find = true; } if (needReplace) { sc[i].parentNode.replaceChild(createNewScript(text),sc[i]); needReplace = false; } if (find) break; } } function createNewScript(str) { var nScript = document.createElement("script"); nScript.setAttribute( "language", "javascript" ); nScript.innerHTML = str; return nScript; } function getScriptText(oNode) { var s = ""; var cs = oNode.childNodes; var l = cs.length; for (var i = 0; i < l; i++) { if ( cs[i].nodeType == 3 ) { //TEXT_NODE s += cs[i].nodeValue; } } return s; } var fn1 = function() { function insertVideo(src,aStart,wdh,hgt) { var div = document.getElementById("greasemonkey_sinavideodiv"); var emb = div.getElementsByTagName("embed")[0]; if (emb) div.removeChild(emb); div.innerHTML = '<embed width="' + wdh + '" height="' + (parseInt(hgt) + 67).toString() + '" src="' + src + '" type="application/x-mplayer2" ' + 'autostart="' + aStart + '" showcontrols="1" showstatusbar="1">'; } if (typeof vWidth == "undefined") var vWidth = "320"; if (typeof vHeight == "undefined") var vHeight = "240"; if (!broadFile) broadFile = narrowFile; if (!narrowFile) narrowFile = broadFile; var vSpt = document.getElementById("greasemonkey_sinavideo"); var gmDiv = document.createElement("div"); gmDiv.id = "greasemonkey_sinavideodiv"; var parent = vSpt.parentNode; parent.insertBefore(gmDiv, vSpt); while (vSpt.nextSibling && vSpt.nextSibling.nodeName !="SCRIPT") parent.removeChild(vSpt.nextSibling); insertVideo("#MEDIAFILE#","#AUTOSTART#",vWidth,vHeight); } var fn2 = function() { function ChgBN(bFile,nFile) { broadFile = bFile; narrowFile = nFile; if (!broadFile) broadFile = narrowFile; if (!narrowFile) narrowFile = broadFile; insertVideo("#MEDIAFILE#","1",vWidth,vHeight); } function ChgVideo(bFile) { broadFile = narrowFile = bFile; insertVideo("#MEDIAFILE#","1",vWidth,vHeight); } } var fn3 = function() { function ChgAudio(id) { var filename = aRadio[id][4]; var origPlayer = document.getElementById("MediaPlayer"); if (!origPlayer) return; var aWidth = origPlayer.width; var aHeight = origPlayer.height; var parent = origPlayer.parentNode; parent.removeChild(origPlayer); parent.innerHTML = '<embed id="MediaPlayer"'+ ' width="' + aWidth + '" height="' + aHeight + '" src="' + filename + '" type="application/x-mplayer2" ' + 'autostart="1" showcontrols="1" showstatusbar="1">'; } } function reloadAudioPlayer(aSc, text) { text = text.replace(/(function\s+\w+\s*\(\s*\)\{)/g, "$1\n"+ "var div = document.createElement('div');\n"+ "var theSc = document.getElementById('greasemonkey_sinaaudio');\n"+ "theSc.parentNode.insertBefore(div, theSc.nextSibling);\n"+ "var str = '';\n" ).replace(/document\.write(?:ln)?\s*\(([^;]+)\);/g, "str += "+"$1"+";" ).replace(/document\.close\s*\(\s*\);/g, "div.innerHTML = str;"); nSc = createNewScript(text); nSc.id = "greasemonkey_sinaaudio"; aSc.parentNode.replaceChild(nSc, aSc); } function execScript(f) { var str = f.toString(); str = str.substring( str.indexOf('{')+1, str.lastIndexOf('}') ); str = str.replace(/"#MEDIAFILE#"/g, mediaFile).replace(/#AUTOSTART#/g, autoStart); var nScript = createNewScript(str); var bd = document.body; if (bd) { bd.appendChild( nScript ); bd.removeChild( nScript ); } else { var h = document.getElementsByTagName("head")[0]; h.appendChild( nScript ); h.removeChild( nScript ); } } // Decode JScript.encode var decoder = new JScriptDecoder(); findPlayer(); if (hasVideoPlayer) findMediaFile(); if (hasMediaFile) execScript(fn1); if (hasMoreMedia) execScript(fn2); if (hasRadio) execScript(fn3); |
|
|
2楼#
发布于:2007-04-19 14:08
我按上面的脚本编了一个user.js,但是还是看不了新浪的视频
|
|
3楼#
发布于:2007-04-19 14:08
请问还有什么解决办法吗?
|
|
4楼#
发布于:2007-04-19 14:08
我贴的那个就是原来的脚本 现在新浪视频换了当然就无效了,暂时没有看到有什么好的方法
|
|
|
5楼#
发布于:2007-04-19 14:08
谢谢楼主了,用ie tab 算了,但是麻烦点
|
|