Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Активные темы » Opera на движке Presto (часть 26)

Модерирует : gyra, Maz

Maz (03-12-2019 21:42): Opera на движке Presto (часть 27)  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

gyra

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Предыдущие части | часть 25  «Oпepа Presto || другие версии, выше v12 (Blink) - здecь»Уcтaнoвка:
 - На переносной USB-накопитель [Stand-alone installation USB] РЕКОМЕНДУЕМ! ... Пример
 - Для всех пользователей [All users on this computer] ...
 - Для текущего пользователя [Current user] ...

Настройка:
  • Полное описание настроек (opera:config) | Советы | Назначения файлов
  • Обход сообщений сайтов "Ваш браузер устарел" (маскировка под другие браузеры)
  • Если на странице сайта вместо букв - "квадратики/иероглифы"
  • Известные проблемы и их решения | Проблемы версий 12.15-16-17
  • Настройка просмотра видео на YouTube и других сайтах

    Другие темы по Опере Presto:
  • Плагины/утилиты/расширения/кнопки/панели
  • Моды меню, русификация
  • Скины/Темы
  • Сборки | Opera AC
  • forum.timsky.ru — патчи, сборка и развитие утекших исходников Opera 12.15 [открытый форум]
  • MyOpera.net — информационный портал | Форум
  • OperaFan.net — информационный портал | Форум (остался только фрагментарный веб-архив)
  • Еще ресурсы | Голосования | Обсуждение содержимого этой шапки.

  • Всего записей: 7932 | Зарегистр. 18-02-2006 | Отправлено: 00:39 05-11-2017 | Исправлено: VladDr, 02:46 21-09-2019
    raddyst

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    WatsonRus
    Цитата:
    Не потому ли, что Гугл на пару с M$ сделали все, чтобы загнобить XP путем гнобления сертификатов и алгоритмов, и Престо 12.18 теперь едва ли не единственный браузер, нормально работающий с сертификатами на XP?  

    То что престо в основном пользуются на хр, ещё не говорит о том - что у оперы там заметная доля .

    Всего записей: 7052 | Зарегистр. 08-03-2010 | Отправлено: 17:31 06-11-2017
    gyra

    Moderator
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    WatsonRus
    raddyst
    Не превращайте тему в флуд.

    Всего записей: 7932 | Зарегистр. 18-02-2006 | Отправлено: 18:08 06-11-2017
    Ilya_SpongeBob

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Пересел с Опера 9.29 на 12.18 т.к. https перестал работать на многис сайтах из-за быдло-вебдевелоперов. Как в 12.18 отключить автоподгонку картинок под окно? Т.е. когда я открываю в адресной строке прямую ссылку на картинку, она открывается ужатой под окно.

    Всего записей: 482 | Зарегистр. 16-02-2011 | Отправлено: 19:05 06-11-2017
    YaZritelVANOMASA

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть ли возможность заставить работать web skype в опере?

    Всего записей: 64 | Зарегистр. 23-08-2017 | Отправлено: 19:16 06-11-2017
    VladDr

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    adasiko, я нe нaшёл cвязи мeждy "oткpoвeниeм" и NT5.x.
     
    raddyst
    Цитата:
    команды по правке утёкших исходников оперы,

    Бoюcь чтo нeт тaкoй команды. A ecли и ecть, тo пpaвят oни явнo для ceбя.

    Всего записей: 2240 | Зарегистр. 05-06-2010 | Отправлено: 19:25 06-11-2017
    raddyst

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VladDr
    Цитата:
    Бoюcь чтo нeт тaкoй команды. A ecли и ecть, тo пpaвят oни явнo для ceбя.

    Знаю, но как раз почти год прошёл с момента, когда в пред. теме "простыни" писались - что как теперь с исходниками заживём...

    Всего записей: 7052 | Зарегистр. 08-03-2010 | Отправлено: 19:38 06-11-2017
    VladDr

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Пересел с Опера 9.29 на 12.18 т.к. https перестал работать на многис сайтах из-за быдло-вебдевелоперов.

    Это не так: шифpoвaниe нa элл. кpивыx, кoтopoe нe пoддepживaют v. дo 12.18, peaльнo тpeбyeт мeньшe pecypcoв и oт eгo иcпoльзoвaния выигpывaют кaк влaдeльцы cepвepoв, тaк и пoльзoвaтeли. Eщё дo выxoдa yпoмянyтoй 9-ки, в лиce этo yжe былo peaлизoвaнo и пoчeмy ~10 лeт нaзaд oпepцы пocчитaли чтo oнo нe нaдo, мнe нe пoнятнo..

    Всего записей: 2240 | Зарегистр. 05-06-2010 | Отправлено: 19:42 06-11-2017
    Alex_Qwerty

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ilya_SpongeBob

    Код:
    // ==UserScript==
    // @include *
    // ==/UserScript==
     
    if(document.contentType.indexOf('image/')==0 && document.contentType.indexOf('svg')==-1) {
        window.donotrun=true;
     
        window.addEventListener('load', function(){
            if (!document.title) document.title = window.location.pathname.match(/([^\/]*)\/*$/)[1];
            var img = document.querySelector('img');
            if (img.naturalWidth && img.naturalHeight) document.title += ' (' + img.naturalWidth + '\xd7' + img.naturalHeight + ')';
        },false);
    }
     

    Всего записей: 2282 | Зарегистр. 09-09-2006 | Отправлено: 19:52 06-11-2017
    billibons

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alex_Qwerty
    А нельзя ли сделать так, чтобы не отключать функцию зума, но по умолчанию картинка была бы не уменьшенной, а увеличенной?

    Всего записей: 1657 | Зарегистр. 15-12-2005 | Отправлено: 20:48 06-11-2017
    Ilya_SpongeBob

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alex_Qwerty , т.е. встроенной настройки нет...
     
    VladDr
    Цитата:
    Это не так: шифpoвaниe нa элл. кpивыx, кoтopoe нe пoддepживaют v. дo 12.18, peaльнo тpeбyeт мeньшe pecypcoв и oт eгo иcпoльзoвaния выигpывaют кaк влaдeльцы cepвepoв
    Так , а что мешало кроме эллиптических кривых включить на серверах шифронаборы , которые поддерживает Опера 9.27? И если у браузера есть шифронабор с ECDHE, сервер выбирает его, если нет -- сервер выбирает то , что дают. Так нет -- вебдевелопер хочет , чтоб я под него подстаивался.

    Всего записей: 482 | Зарегистр. 16-02-2011 | Отправлено: 20:55 06-11-2017 | Исправлено: Ilya_SpongeBob, 21:04 06-11-2017
    VladDr

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ilya_SpongeBob
    Цитата:
    а что мешало кроме эллиптических кривых включить на серверах шифронаборы , которые поддерживает Опера 9.27?

    Bидимo дeньги: бoльшинcтвo c тoлькo ECDSA c бecплaтным https oт CloudFlare.

    Всего записей: 2240 | Зарегистр. 05-06-2010 | Отправлено: 21:24 06-11-2017
    MERCURY127



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    а что мешало
    так уязвимости же... формально это все - забота о ползателе, чтоб его банковскую транзакцию не смогли перехватить злобные марсиане.  
    на практике же, это целенаправленный перевод интернета под неявный контроль со стороны центров выдачи правильных сертификатов.
    вопрос еще актуален?

    Всего записей: 11541 | Зарегистр. 03-08-2008 | Отправлено: 21:29 06-11-2017 | Исправлено: MERCURY127, 21:30 06-11-2017
    dansn

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Youtube flash плеер с патчем кода дешифровки сигнатур - Файлы . Youtube flash player_Decipher patched_v1.zip - код дешифровки обновлен, для любых способов обхода crossdomain.xml. FlashProxy5.zip - код вынесен из плеера, можно задать в настройках. Код дешифровки отсюда . Тестировалось на winxp c flash18.

    Всего записей: 493 | Зарегистр. 06-02-2008 | Отправлено: 01:10 07-11-2017
    Rwd

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Fartman

    Цитата:
    А ещё не работает это видео: https://www.youtube.com/watch?v=8f2ZeHaAHvY  Использую FlashProxy4.zip

    С FlashProxy5 работает.

    Всего записей: 623 | Зарегистр. 11-11-2016 | Отправлено: 02:13 07-11-2017
    Alex_Qwerty

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Код:
    // ==UserScript==
    // @include *.youtube.com/*
    // @include *.youtube-nocookie.com/*
    // @include *.youtubeeducation.com/*
    // ==/UserScript==
    (function(opera){
     
        var ScriptName = 'youtube_fuck_html5.js v17';
     
        var conf = {
              relatedVideos : false        // click title if not works
            , blockPlayerBase : true
            , videoQuality : 'auto'        // highres hd1440 hd1080 hd720 large medium small tiny auto
            , autoplay : 1                // 1 0; not in background; not in iframe
            , del43 : true                // remove format 43 (webm 640x360); can help switching to 720
            , noSubtitles: true            // they don't works
            , swf : 'https://s.ytimg.com/yts/swfbin/player-vfljf_kbO/watch_as3.swf'    // dead
            //, swf : 'https://s.ytimg.com/yts/swfbin/player-vfljf_kbO/watch_as3-vfl7SkMGe.swf'    // dead
            , deleteCookies: [
                //'VISITOR_INFO1_LIVE'    // messes with signatures
            ]
            , addParams: {
                  theme: 'dark'        // dark, light
                , color: 'red'        // red, white
                //, hl: 'en'
            }
            //, wmode : 'direct'    // window, direct, opaque, transparent, gpu https://helpx.adobe.com/ru/flash/kb/flash-object-embed-tag-attributes.html
        }
     
    /*
    Need something against crossdomain.xml and watch_as3.swf
     
    Filters for Proxomitron:
     
    [Patterns]
    Name = "youtube dash manifest fix"
    Active = TRUE
    URL = "manifest.googlevideo.com(:443|)/api/manifest/dash/"
    Limit = 256
    Match = "(<SegmentList>)\1(<SegmentURL media="\2")\3"
    Replace = "\1<Initialization sourceURL="\2"/>\3"
     
     
     
    [HTTP headers]
    In = FALSE
    Out = TRUE
    Key = "URL: youtube crossdomain.xml"
    URL = "([^/]++.|)(youtube(-nocookie|education|).com|ytimg.com|googlevideo.com)(:443|)/crossdomain.xml$RDIR(http://local.ptron/crossdomain.xml)"
     
    In = FALSE
    Out = TRUE
    Key = "URL: youtube watch_as3.swf"
    URL = "s.ytimg.com(:443|)/yts/swfbin/player-*watch_as3.swf$RDIR(http://local.ptron/watch_as3.swf)"
     
    In = FALSE
    Out = TRUE
    Key = "Accept-encoding: youtube no gzip, enable filtering"
    URL = "manifest.googlevideo.com(:443|)/$FILTER(True)"
     
     
     
    crossdomain.xml (put in Proxomitron\html\):
     
    <?xml version="1.0"?>
    <cross-domain-policy>
      <allow-access-from domain="*" />
    </cross-domain-policy>
     
    */
     
        var sts, pr, formats={};
     
        document.createElement("video").constructor.prototype.canPlayType = function(type){return ""};    // disable HTML5
     
        var showConf = true;
        function log(str){
            opera.postError(ScriptName + (str?': '+str:'')+(showConf?'\nconf='+JSON.stringify(conf):''));
            showConf = false;
        }
     
        //https://learn.javascript.ru/cookie
        function setCookie(name, value, options) {options = options || {};var expires = options.expires;if (typeof expires == "number" && expires) {var d = new Date();d.setTime(d.getTime() + expires * 1000);expires = options.expires = d;}if (expires && expires.toUTCString) {options.expires = expires.toUTCString();}value = encodeURIComponent(value);var updatedCookie = name + "=" + value;for (var propName in options) {updatedCookie += "; " + propName;var propValue = options[propName];if (propValue !== true) {updatedCookie += "=" + propValue;}}document.cookie = updatedCookie;}
        function deleteCookie(name, options) {options=options||{}; options.expires=-1; setCookie(name, "", options)}
     
     
        if (conf.deleteCookies) for (var i=0; i<conf.deleteCookies.length; i++) {
            deleteCookie(conf.deleteCookies[i],{domain:location.hostname});
            deleteCookie(conf.deleteCookies[i],{domain:location.hostname.replace(/^www\./,'.')});
            deleteCookie(conf.deleteCookies[i],{domain:location.hostname.replace(/^www\./,'')});
        }
     
        //opera.postError(ScriptName);
        opera.addEventListener("BeforeScript",function(e){
            if (e.element.src.match(/\/yts\/jsbin\/player.*?\/base\.js/)) {
                sts = e.element.text.match(/[{,]sts:(\d+)[},]/);
                sts=sts&&sts[1];
                if (sts) {
                    log('player: '+e.element.src+'\nsts='+sts+'\nUA='+navigator.userAgent);
                    if (conf.blockPlayerBase) {
                        if (window.canBlockPlayerBase) {
                            var decf = e.element.text.match(/=function\(a\){(a=a.split\(""\)[^}]*?;return a.join\(""\))};/);
                            decf = decf && decf[1];
                            var deco = decf && decf.match(/([\w$_]+)\.[\w$_]+\(a,\d+\);/);
                            deco = deco && e.element.text.match(new RegExp('var '+deco[1]+'={[\\w$_]+:function\\(a[\\s\\S]*?};'))
                            deco = deco && deco[0];
                            if (decf && deco) {
                                decodeSignature = new Function('a', deco+decf);
                                e.preventDefault();
                                log('blocked player base.js: '+e.element.src);
                            } else {
                                log("error: can't get decoder from player base.js")
                            }
                        } else {
                            log('blockPlayerBase requires blockYoutubeScripts in youtube_fix.js');
                        }
                    } else {
                        e.element.text = e.element.text.replace('=function(a){a=a.split("")','=decodeSignature=function(a){a=a.split("")');
                    }
                }
            }
        },false);
     
        function getField(obj) {
            var tmp = obj;
            if (tmp) for (var i=1; i<arguments.length; i++) {
                tmp = tmp[arguments[i]];
                if (!tmp) break;
            }
            return tmp;
        }
     
        function xhr(url, method, post, xml, headers){
            var x = new XMLHttpRequest();
            x.open(method || 'GET', url, false);
            if (headers) for (var i=0; i<headers.length; i++) x.setRequestHeader(headers[i][0], headers[i][1]);
            x.send(post);
            return xml?x.responseXML:x.responseText;
        }
     
        function splitKV(str) {
            var o = {};
            var tmp;
            var re = /([\da-z_]+)=([^&]*)/gi;
            while ( (tmp = re.exec(str))!==null ) { o[tmp[1]] = decodeURIComponent(tmp[2].replace(/\+/g,' '));    }
            return o;
        }
     
        function concatKV(obj){
            var tmp = [];
            for (var n in obj) tmp.push(n+'='+encodeURIComponent(obj[n]).replace(/,/g,'%2C') );
            return tmp.join('&');
        }
     
        var onceFix = true;
        function fix(str){
            var tmp = str.split(',');
            for (var i=tmp.length-1; i>=0; i--) {
                var obj = splitKV(tmp[i]);
                del(obj,['xtags']);
                if (conf.del43 && obj.itag==43) {
                    tmp.splice(i,1);    // del
                    log('removed format 43')
                } else if (obj.clen==0 && obj.url.indexOf('live=1')==-1) {
                    tmp.splice(i,1);    // del
                    log('removed clen==0 itag='+obj.itag);
                } else if (obj.s) {
                    obj.itag = parseInt(obj.itag);
                    if (formats[obj.itag]) {
                        obj.url = formats[obj.itag];
                        delete obj.s;
                    } else if (!window.decodeSignature) {
                        if (onceFix) onceFix = log('error: no decodeSignature()')
                        return str;
                    } else {
                        obj.url += '&'+(obj.sp||'signature')+'='+decodeSignature(obj.s);
                        delete obj.s;
                    }
                    tmp[i] = concatKV(obj);
                }
            }
            return tmp.join(',');
        }
     
        function del(obj,arr){ for (var d in arr) delete obj[arr[d]]; }
        function set(obj,arr){ for (var d in arr) obj[d]=arr[d]; }
        function setNew(obj,arr){ for (var d in arr) if (typeof(obj[d])=='undefined') obj[d]=arr[d]; }
     
        if (location.pathname.indexOf('/embed/')==0 || location.pathname=='/watch' && window==window.top) document.addEventListener('DOMContentLoaded',function(){
            var errMsg = document.querySelector('#unavailable-message');
            var div;
            var selectors = ['div.html5-video-player', 'div#player-api', 'div#player'];
            for (var i=0,s; s=selectors[i]; i++) if (div = document.querySelector(s)) break;
            if (!div) {
                log('player div not found');
            } else {
                log('found div:'+(div.id?' id="'+div.id+'"':'') + (div.className?' class="'+div.className+'"':''));
                if (!sts) log('warning: sts from /player-./base.js not found! Check content blocker.');
                div.classList.remove('off-screen-target');
                div.innerHTML = '<br><br>'+ScriptName;
                var u = document.querySelector('div#player-unavailable');
                if (u) u.parentNode.removeChild(u);
                var id = (''+location).match(/\/embed\/([\da-z_-]{11})/i) || (''+location).match(/[&?]v=([\da-z_-]{11})/i);
                id = id&&id[1];
                if (!id) {
                    div.innerHTML += ' - no video id';
                    return log('no video id');
                }
     
                var bg = 'https://i.ytimg.com/vi/'+id+'/hqdefault.jpg';
                var info, infoLength, status, reason;
                function gvi(data) {
                    var url = '/get_video_info?html5=1&asv=3&ps=default'+(sts?'&sts='+sts:'')+'&video_id='+id+(data||'');
                    info = xhr(url);
                    if (info.indexOf('status=')==-1) info = xhr(url);    // second try
                    infoLength = info.length;
                    info = splitKV(info);
                    if (info.player_response) info.player_response = JSON.parse(info.player_response);
                    status = getField(info, "player_response", 'playabilityStatus', 'status');
                    if (status) status=status.toLowerCase();
                    reason = getField(info, "player_response", 'playabilityStatus', 'reason');
     
    //alert(JSON.stringify(info,null,'\t'))
                }
                gvi();
                if (status=="unplayable") {
                    if (reason.indexOf("youtube.com/watch")!=-1) {
                        var page = xhr('/watch?v='+id);
                        var tmp = page.match(/ytplayer.config = ({.*?});ytplayer/);
                        info = JSON.parse(tmp[1]).args;
                        if (info.player_response) info.player_response = JSON.parse(info.player_response);
                        status = getField(info, "player_response", 'playabilityStatus', 'status');
                        if (status) status=status.toLowerCase();
                        reason = getField(info, "player_response", 'playabilityStatus', 'reason');
    //alert(JSON.stringify(tmp,null,'\t'))
     
                    } else {
                        gvi('&eurl=http://www.google.com/');
                    }
                }
     
                if (status!='ok') {
                    div.innerHTML = '<br><br>'+reason;
                    return log('reason: '+reason);
                }
     
                log(JSON.stringify({cbr:info.cbr, cbrver:info.cbrver, cbrand:info.cbrand, infoLength:infoLength}));
                if (!conf.relatedVideos) delete info.rvs;
                del (info, ['ppv_remarketing_url','remarketing_url', 'allowed_ads', 'survey_smartpixel_url']);
                pr = info.player_response;
                if (pr) {
                    var sd = pr.streamingData || {};
                    var tmp = sd.formats;
                    if (tmp) for (var i=0; i<tmp.length; i++) formats[parseInt(tmp[i].itag)]=tmp[i].url;
                    tmp = sd.adaptiveFormats;
                    if (tmp) for (var i=0; i<tmp.length; i++) formats[parseInt(tmp[i].itag)]=tmp[i].url;
                    // manifests don't work?
                    //if (!info.dashmpd) info.dashmpd = sd.dashManifestUrl;
                    //if (!info.hlsvp) info.hlsvp = sd.hlsManifestUrl;
                    if (getField(pr, 'playabilityStatus', 'status')=="UNPLAYABLE") return div.innerHTML = '<br><br>' + pr.playabilityStatus.reason;
                }
     
     
                //var eventid = (info.url_encoded_fmt_stream_map||info.adaptive_fmts).match(/ei%3D([^%]+)/)[1];
                var crap = {
                      storyboard_spec: getField(pr, 'storyboards', 'playerStoryboardSpecRenderer', 'spec')
                          || "http://i9.ytimg.com/sb/LpWKhuvcXGU/storyboard3_L$L/$N.jpg?sqp=ovOX_wMGCMLdv58F|48#27#100#10#10#0#default#rs$AOn4CLCZ4iJXVfCkSXp3QGpGckl5vCoKAA|80#45#76#10#10#1000#M$M#rs$AOn4CLCLFHKsZ4N97Z2y-gYuQauK7NH3SQ|160#90#76#5#5#1000#M$M#rs$AOn4CLDLKWOa64VAWs_XCvNKMPnOd1xWCQ"
                    , token: 'fuck'
                    , length_seconds: getField(pr, 'videoDetails', 'lengthSeconds')
                    , title: getField(pr, 'videoDetails', 'title')
                    , video_id: getField(pr, 'videoDetails', 'videoId')
                }
    //alert(JSON.stringify(crap,null,'\t'))
                setNew(info, crap);
     
     
                if (conf.noSubtitles) {
                    del(info, ['ttsurl','caption_tracks','caption_audio_tracks', 'cc_asr', 'cc3_module', 'caption_translation_languages', 'cc_font']);
                    info.has_cc = 'False';
                } else {
                    var tmp = JSON.parse(info.player_response||'{}');
                    if (tmp.captions) {
                        tmp = tmp.captions.playerCaptionsTracklistRenderer.captionTracks
                    }
     
                }
                if (conf.del43 && info.fmt_list) info.fmt_list = info.fmt_list.replace('43/640x360,','');
                if (conf.addParams) set(info, conf.addParams);
                if (conf.videoQuality) info.vq = conf.videoQuality;
                info.autoplay = conf.autoplay && !document.hidden && window==window.top && 1 || 0;
                if (info.url_encoded_fmt_stream_map) info.url_encoded_fmt_stream_map = fix(info.url_encoded_fmt_stream_map);
                if (info.adaptive_fmts) info.adaptive_fmts = fix(info.adaptive_fmts);
     
     
     
                if (info.dashmpd) info.dashmpd = info.dashmpd.replace(/\/s\/([\dA-F.]+)/,function(a,s){return '/signature/'+decodeSignature(s)});
                set(info, {no_stats:1, allow_embed:1, no_get_video_log:1, rmkt:0, rtl:0, ad3_module:0, ad_preroll:0, enable_cardio:0
                    , enable_cardio_before_playback:0, advideo:0, skl:1});
                del(info, ['player_response']);    // for some videos
                del(info, ['fflags']);
    //alert(JSON.stringify(info,null,'\t'));
                info = concatKV(info);
                var wmode = conf.wmode ? 'wmode="'+conf.wmode+'"' : '';
                div.innerHTML = '<embed src="'+conf.swf+'" flashvars="'+info+'" '+wmode+' style="background: url('+bg+') center no-repeat" type="application/x-shockwave-flash" width=100% height=100% allowfullscreen="true" allowscriptaccess="always" bgcolor="#000000" />'
            } // !div
        },false);
     
    })(opera)
     

     
     
     

    Код:
     
    // ==UserScript==
    // @include *//youtube.com/*
    // @include *.youtube.com/*
    // @include *//youtube-nocookie.com/*
    // @include *.youtube-nocookie.com/*
    // @include *//youtubeeducation.com/*
    // @include *.youtubeeducation.com/*
    // @exclude http://tparser.org/*
    // ==/UserScript==
     
    if ( document.contentType=='text/html' || (''+location).match(/[/.]youtube(-nocookie|education|).com\/v\//) ) (function(opera){
     
        var ScriptName = 'youtube_fix.js v13';
     
        var conf = {
              fixObjects : true        // object -> iframe
            , fixInsertedObjects : {
                  enabled: true        // may break sites; use whitelist or // @exclude *
                , blacklist : ['translate.yandex.ru']     // [] - works anywhere; ['tparser.org']
                , whitelist : []     // [] - works anywhere; ['3dnews.ru', 'livejournal.com']
            }
            , blockYoutubeScripts : true    // except player base.js
            //, loadComments : true            // don't works
            , addLinksInEmbeds : true
            , loadThumbnails : true
            , fixList : true    // for long channel lists
        }
     
        var showConf = true;
        function log(str){
            opera.postError(ScriptName +(str?': '+str:'')+(showConf?'\nconf='+JSON.stringify(conf):''));
            showConf = false;
        }
     
        function findHost(hosts, host){
            var flag = -1;
            while (flag==-1 && host) {
                flag = hosts.indexOf(host);
                host = host.replace(/^[^.]*\.?/,'');
            }
            return flag;
        }
        var youtubeHosts = ['youtube.com','youtube-nocookie.com','youtubeeducation.com'];
     
        function create(el, cn, ih){var tmp=document.createElement(el); if(cn)tmp.className=cn; tmp.innerHTML=ih||''; return tmp; }
     
        function xhr(url, method, post, xml, headers){
            var x = new XMLHttpRequest();
            x.open(method || 'GET', url, false);
            if (headers) for (var i=0; i<headers.length; i++) x.setRequestHeader(headers[i][0], headers[i][1]);
            x.send(post);
            return xml?x.responseXML:x.responseText;
        }
     
        var isYoutube = findHost(youtubeHosts, location.hostname)!=-1;
     
        var v = isYoutube && location.pathname.match(/^\/v\/([\da-z_-]{11})/i);
        if (v) {
            stop();
            log('redirecting to /embed/');
            location = '/embed/'+v[1];
        }
     
        var videoId = (''+location).match(/[&?]v=([\da-z_-]{11})/i) || (''+location).match(/\/embed\/([\da-z_-]{11})/i);
        videoId = videoId && videoId[1];
     
     
        if (conf.blockYoutubeScripts && isYoutube) {
            var once = true;
            window.canBlockPlayerBase = true;
            var needPlayerBase = true;
            var func = function(){};
            requestAnimationFrame = func;
            writeEmbed = func;
            writeLightweightEmbed = func;
            spf = {script:{path:func, declare:func}};
            ytcsi = {info: func, tick:func};
            yt = {config_:{}, pushConfigArray:func, setMsg:func}
     
            yt.setConfig = function(o,v){
                if (v) { yt.config_[o]=v } else {for (var k in o) yt.config_[k]=o[k]}
                if (needPlayerBase && o && o.PLAYER_CONFIG && o.PLAYER_CONFIG.assets && o.PLAYER_CONFIG.assets.js) {
                    var s = document.createElement('script');
                    s.src = o.PLAYER_CONFIG.assets.js;
                    document.body.appendChild(s);
                    log('inserted player base.js: '+s.src);
                    needPlayerBase = false;
                }
            }
     
            var moreButton;
     
            opera.addEventListener("BeforeExternalScript",function(e){
                if (e.element.src.match(/\/yts\/jsbin\/player.*?\/base\.js/)) {
                    needPlayerBase = false;
                } else {
                    e.preventDefault();
                    if (once) once = log('blocking youtube scripts...');
                }
     
                if (!moreButton) {
                    moreButton = document.querySelector('button[data-uix-load-more-href]');
                    if (moreButton){
                        var L=document.selectNodes('//link[@rel="next"]');
                        for (var l=0; l<L.length; l++) { L[l].parentNode.removeChild(L[l]);    };
                        var ln=document.createElement('link');
                        ln.rel='next';
                        ln.href="javascript:document.querySelector('button[data-uix-load-more-href]').click()";
                        document.body.appendChild(ln);
                        opera.postError(ScriptName+' FF');
                    }
                }
            },false);
        }
     
     
        document.addEventListener('DOMContentLoaded',function(){
     
            var tmp = document.querySelectorAll('a[href*="youtube.com/edit?"]');
            for (var i=0,a; a=tmp[i]; i++) {
                var id = a.href.match(/[?&]video_id=([\da-z_-]{11})/i);
                if (id) a.href = 'https://www.youtube.com/watch?v='+id[1];
            }
     
            if (conf.fixObjects) {
     
                function fixObjects(embeds) {
                    for (var i=0,e,o; e=embeds[i]; i++){
                        o=e.parentNode.tagName.toLowerCase()=='object'? e.parentNode : e;
                        var vid = o.outerHTML.match(/youtube(?:education|-nocookie|)\.com\/v\/([\da-z_-]{11})/i);
                        if (vid=vid&&vid[1]) {
                            var iframe = document.createElement('iframe');
                            var width = o.width || o.style.width || '640px';
                            var height = o.height || o.style.height || '480px';
                            if (!/[a-zA-Z%]+$/.test(width)) width +='px';
                            if (!/[a-zA-Z%]+$/.test(height)) height +='px';
                            //iframe.style = "width: "+width+" !important ; height: "+height + ' !important';
                            iframe.style = "width: "+width+"; height: "+height;
                            if (o.className) iframe.className = o.className;
                            if (o.id) iframe.id = o.id;
                            iframe.src = 'https://www.youtube.com/embed/'+vid; // youtube-nocookie.com not always works
                            o.parentNode.insertBefore(iframe, o);
                            o.parentNode.removeChild(o);
                            log('replaced object in html: '+vid);
                        }
                    }
                }
                fixObjects(document.querySelectorAll('object'));
                fixObjects(document.querySelectorAll('embed'));
     
                var fixInsertedObjectsEnabled = (conf.fixInsertedObjects && conf.fixInsertedObjects.enabled) && !isYoutube
                    && (window != window.top ? document.body.innerHTML.length>0 : true) // scriptweeder iframe
                    && (!conf.fixInsertedObjects.whitelist || (!conf.fixInsertedObjects.whitelist.length || findHost(conf.fixInsertedObjects.whitelist, location.hostname)!=-1) )
                    && (!conf.fixInsertedObjects.blacklist || (!conf.fixInsertedObjects.blacklist.length || findHost(conf.fixInsertedObjects.blacklist, location.hostname)==-1) );
                if (fixInsertedObjectsEnabled) {
                    log('warning: fixInsertedObjects may break sites');
                    document.addEventListener('DOMNodeInserted', function(e){
                        if (e.target.innerHTML && /youtube(education|-nocookie|)\.com\/v\//.test(e.target.innerHTML)) {
                            log('DOMNodeInserted');
                            var tmp = e.target.outerHTML.replace(/<object[\s\S]*?youtube(?:education|-nocookie|)\.com\/v\/([\da-z_-]{11})[\s\S]*?<\/object>/ig, function(o,id){
                                var tmp = o.match(/^<object[\s\S]*?>/i)[0];
                                var width = tmp.match(/width\s*[:=]\s*(\d\w*)/);
                                width = width&&width[1] || '640px';
                                var height = tmp.match(/height\s*[:=]\s*(\d\w*)/);
                                height = height&&height[1] || '480px';
                                if (!/[a-zA-Z%]+$/.test(width)) width +='px';
                                if (!/[a-zA-Z%]+$/.test(height)) height +='px';
                                return '<iframe src="https://www.youtube.com/embed/'+id+'" style="width: '+width+' !important; height: '+height+' !important"></iframe>';
                            });
                            if (e.target.outerHTML!= tmp) e.target.outerHTML = tmp;
                        }
                    }, false);
                }
            }
     
            if (isYoutube && conf.loadThumbnails) {
                var pics = document.querySelectorAll('img[data-thumb]');
                for (var i=0; i<pics.length; i++) pics[i].src = pics[i].getAttribute('data-thumb');
            }
     
     
            if (conf.loadComments && conf.blockYoutubeScripts && isYoutube && location.pathname=='/watch' && window==window.top) {
                var tmp = document.querySelector('#watch-discussion');
                if (!tmp) {
                    log('no #watch-discussion');
                } else {
                    tmp.style.display='none';
                    var comments = create('div', 'crutch-comments-container');
                    comments.appendChild(create('div', 'crutch-comments-total', 'comments disabled ?'))
                    tmp.parentNode.insertBefore(comments, tmp);
                    var headers = [['Content-Type', 'application/x-www-form-urlencoded'],['X-YouTube-Identity-Token'," "]];
                    var c = xhr('/watch_fragments2_ajax?v='+videoId+'&tr=scroll&distiller=1&ctoken='+window.yt.config_.COMMENTS_TOKEN+'&frags=comments&spf=load', 'POST'
                        , 'session_token='+encodeURIComponent(window.yt.config_.XSRF_TOKEN)+'&client_url='+location, false, headers);
                    if (c.indexOf('{')!=-1) {
                        c = JSON.parse(c);
    //alert(JSON.stringify(c,null,'\t'));
    //alert(c.content_html);
                        comments.innerHTML = c.content_html;
                        log('comments');
                    }
                }
            }
     
            if (conf.blockYoutubeScripts && isYoutube && location.pathname=='/watch' && window==window.top) {
                var s = document.createElement('style');
                s.appendChild(document.createTextNode('#watch-description + .yt-uix-expander-collapsed-body {display:none !important} .yt-uix-expander-collapsed #watch-description-text {max-height: 100% !important}'));
                document.body.appendChild(s);
            }
     
            var id = window.yt && yt.config_ && yt.config_.VIDEO_ID;
            if (conf.addLinksInEmbeds && !location.pathname.indexOf('/embed/') && id) {
                var pics = id && window.yt.config_.PLAYER_CONFIG.args || {};
                var img = pics.iurlmaxres || pics.iurlhq720 || pics.iurlsd || pics.iurl || 'http://i.ytimg.com/vi/'+id+'/hqdefault.jpg';
                var span = document.createElement('span');
                span.innerHTML = '&nbsp;<a href="http://www.youtube.com/watch?v='+id+'" target="_blank">link</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="'+img+'" target="_blank">img</a>';
                span.style='position:absolute; top:0; left:0; background:white';
                document.body.appendChild(span);
            }
     
            // load more videos
            if (conf.blockYoutubeScripts && isYoutube) {
                var more = document.querySelector('button[data-uix-load-more-href]');
                if (more) {
                    loadNextPage = function(){
                        var next = this.getAttribute('data-uix-load-more-href');
                        var targetid = this.getAttribute('data-uix-load-more-target-id');
                        if (next) {
                            var tmp = xhr(next);
                            tmp = JSON.parse(tmp);
                            var html = tmp.content_html;
    //alert(html)
                            html = html.replace(/src="\/yts\/img\/pixel-[^>]*?data-thumb="/g,'src="');
                            if (conf.fixList) {
                                var tmp2 = document.createElement('span');
                                tmp2.innerHTML = html;
                                //var html2=[];
                                var videos = tmp2.querySelectorAll('li.yt-shelf-grid-item');
                                for (var i=0; i<videos.length; i++) {
                                    var v = videos[i];
                                    var url = v.querySelector('a').href;
                                    var thumb = v.querySelector('img').src;
                                    var time = v.querySelector('.video-time');
                                    var info = v.querySelector('.yt-lockup-meta-info');
                                    var title = v.querySelector('h3');
                                    v.innerHTML = ('<a href="'+url+'"><img src="'+thumb+'">'+'</a><br>'+title.outerHTML+'<br>'+info.outerHTML+time.innerText);
                                }
    //alert(html2)
    //                            html = html2.join('');
                                document.getElementById(targetid).insertAdjacentElement('beforeend', tmp2);
                            } else {
                                document.getElementById(targetid).insertAdjacentHTML('beforeend', html);
                            }
                            if (tmp.load_more_widget_html) {
                                next = tmp.load_more_widget_html.match(/data-uix-load-more-href="([^"]+)/);
                                if (next) this.setAttribute('data-uix-load-more-href', next[1]);
                            } else {
                                this.parentNode.removeChild(this);
                            }
                        }
                    }
                    more.onclick = loadNextPage;
                }
            }
     
            // first video in channel
            var upsell = document.querySelector('#upsell-video');
            if (upsell) {
                id = upsell.getAttribute('data-video-id');
                if (id) upsell.innerHTML = '<a href="/watch?v='+id+'"><img src="https://i.ytimg.com/vi/'+id+'/mqdefault.jpg"></a>';
            }
     
        },false);
     
    })(opera)
     

     
    https://www.upload.ee/files/10718439/watch_as3_embed.zip.html
    Исправил функцию com.google.youtube.model:YouTubeEnvironment:::onSite()::Boolean чтоб всегда возвращала true - чтоб в менюхе был 'copy embed code'.

    Всего записей: 2282 | Зарегистр. 09-09-2006 | Отправлено: 09:23 07-11-2017 | Исправлено: Alex_Qwerty, 10:08 13-11-2019
    freeman440

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alex_Qwerty
    описание бы, что к чему и с чем
     
    Добавлено:
    Rwd
    Цитата:
    С FlashProxy5 работает.
    У меня не работает

    Всего записей: 2503 | Зарегистр. 17-09-2008 | Отправлено: 10:53 07-11-2017
    kianID



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    freeman440: (10:53 07-11-2017)
    Цитата:
    У меня не работает

    Аналогично. Не пашет именно этот видос.
     
     Rwd: (02:13 07-11-2017)
    Цитата:
    С FlashProxy5 работает.

    О, а сборочку куда-нибудь закиньте в которой всё работает, бум разбираться.

    Всего записей: 238 | Зарегистр. 04-01-2012 | Отправлено: 11:17 07-11-2017
    Rwd

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    freeman440
    kianID
    На тот момент работало. Была ещё мысль сделать скрин, но какой от него толк:  на картинке - работает, а так - нет?

    Всего записей: 623 | Зарегистр. 11-11-2016 | Отправлено: 11:56 07-11-2017
    kianID



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Rwd: (11:56 07-11-2017)
    То есть, сейчас уже всё, не работает и у Вас?

    Всего записей: 238 | Зарегистр. 04-01-2012 | Отправлено: 11:59 07-11-2017
    Rwd

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kianID
    Да. Сам каких-то изменений за это время, разумеется, не делал.
     
    Добавлено:
    Даже О не закрывал

    Всего записей: 623 | Зарегистр. 11-11-2016 | Отправлено: 12:02 07-11-2017
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

    Компьютерный форум Ru.Board » Компьютеры » Программы » Активные темы » Opera на движке Presto (часть 26)
    Maz (03-12-2019 21:42): Opera на движке Presto (часть 27)


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru