To enhance YouTube performance by modifying YouTube JS Engine
< YouTube JS Engine Tamerについてのフィードバック
其他擴充套件,腳本都關掉
測試出來了。有衝突,待解決
已解決,請更新
不好意思昨天沒寫詳細。
只有兩個同時打開才會黑掉,其他腳本都關閉了
感謝作者的辛勞
YA!
順利觀看中
不好意思回報,還有個小bug,影片切換到背景頁後,無法繼續讀取緩衝,直播讀取正常
(但如果讀取第二段緩衝後,才切換背景頁,就可正常讀取)
(只有同時打開上面寫的攔截腳本)
(另外多重測試後,發覺攔截腳本1.1.6版本不會停止,1.1.7以後才會無法讀取緩衝)
測試影片【歌ってみた】ギフト / 内緒のピアス cover by TanZ
https://www.youtube.com/watch?v=0aIzfekltOM
打完發覺有點複雜...我不要同時開兩個腳本好了
unsafeWindow.fetch = function () {
const fetch_ = async function (uri, options) {
async function fetch_request(response) {
let url = response.url
inject_info.fetch = true
return_response = response
if (url.indexOf('youtubei/v1/next') > -1) {
return await deal_resposn('next', response, watch_page_ytInitialData_ad_rule)
}
if (url.indexOf('youtubei/v1/player') > -1) {
return await deal_resposn('player', response, ytInitialPlayerResponse_ad_rule)
}
if (url.indexOf('youtubei/v1/browse') > -1) {
let rule = home_page_ytInitialData_ad_rule
if (page_type === 'home' && !user_data.open_recommend_liveroom) {
let node, category_text
if (mobile_web) {
node = document.querySelector('#filter-chip-bar > div > ytm-chip-cloud-chip-renderer.selected')
category_text = node && node.textContent
} else {
node = document.querySelector('#chips > yt-chip-cloud-chip-renderer.style-scope.ytd-feed-filter-chip-bar-renderer.iron-selected')
category_text = node && node.querySelector('#text').textContent
}
const filter_list = [flag_info.category_game, flag_info.category_live, flag_info.category_news]
if (filter_list.includes(category_text)) {
let body
if (uri.body_) {
try {
body = JSON.parse(uri.body_)
} catch (error) {
}
}
if (!body || body.browseId !== 'FEwhat_to_watch') {
rule = home_page_ytInitialData_ad_rule.filter(item => item.indexOf(flag_info.live) === -1)
}
}
}
return await deal_resposn('browse', response, rule)
}
if (url.indexOf('https://m.youtube.com/youtubei/v1/guide') > -1) {
return await deal_resposn('guide', response, home_page_ytInitialData_ad_rule)
}
if (url.indexOf('/youtubei/v1/search') > -1) {
return await deal_resposn('guide', response, home_page_ytInitialData_ad_rule)
}
if (url.indexOf('/unsubscribe?prettyPrint=false') > -1) {
return await deal_resposn('unsubscribe', response)
}
if (url.indexOf('/subscribe?prettyPrint=false') > -1) {
return await deal_resposn('subscribe', response)
}
return return_response
}
return origin_fetch(uri, options).then(fetch_request)
}
const names = Object.getOwnPropertyNames(origin_fetch);
for (let i = 0; i < names.length; i++) {
if (names[i] in fetch_)
continue;
let desc = Object.getOwnPropertyDescriptor(origin_fetch, names[i])
define_property_hook(fetch_, names[i], desc);
}
return fetch_
}()
unsafeWindow.fetch = function () {
const fetch_ = async function (uri, options) {
async function fetch_request(response) {
let url = response.url
inject_info.fetch = true
return_response = response
if (url.indexOf('youtubei/v1/next') > -1) {
}
if (url.indexOf('youtubei/v1/player') > -1) {
}
if (url.indexOf('youtubei/v1/browse') > -1) {
let rule = home_page_ytInitialData_ad_rule
if (page_type === 'home' && !user_data.open_recommend_liveroom) {
let node, category_text
if (mobile_web) {
node = document.querySelector('#filter-chip-bar > div > ytm-chip-cloud-chip-renderer.selected')
category_text = node && node.textContent
} else {
node = document.querySelector('#chips > yt-chip-cloud-chip-renderer.style-scope.ytd-feed-filter-chip-bar-renderer.iron-selected')
category_text = node && node.querySelector('#text').textContent
}
const filter_list = [flag_info.category_game, flag_info.category_live, flag_info.category_news]
if (filter_list.includes(category_text)) {
let body
if (uri.body_) {
try {
body = JSON.parse(uri.body_)
} catch (error) {
}
}
if (!body || body.browseId !== 'FEwhat_to_watch') {
rule = home_page_ytInitialData_ad_rule.filter(item => item.indexOf(flag_info.live) === -1)
}
}
}
}
if (url.indexOf('https://m.youtube.com/youtubei/v1/guide') > -1) {
}
if (url.indexOf('/youtubei/v1/search') > -1) {
}
if (url.indexOf('/unsubscribe?prettyPrint=false') > -1) {
}
if (url.indexOf('/subscribe?prettyPrint=false') > -1) {
}
return return_response
}
return origin_fetch(uri, options).then(fetch_request)
}
const names = Object.getOwnPropertyNames(origin_fetch);
for (let i = 0; i < names.length; i++) {
if (names[i] in fetch_)
continue;
let desc = Object.getOwnPropertyDescriptor(origin_fetch, names[i])
define_property_hook(fetch_, names[i], desc);
}
return fetch_
}()
刪除,或改2,目前都一樣會卡
我暫時用ub擋
辛苦了
(另外多重測試後,發覺攔截腳本 1.1.6 版本不會停止,1.1.7 以後才會無法讀取緩衝)
所以是只有 youtube-js-engine-tamer 跟 攔截腳本 兩個開啟嗎
1.1.6 版本不會停止,1.1.7 和最新版本會停止?
刪除,或改 2,目前都一樣會卡
把以下的都刪掉看看
unsafeWindow.Request = function () {
let req = new origin_Request(...arguments)
if (arguments.length > 1 && arguments[1]['body']) {
req['body_'] = arguments[1]['body']
}
return req
}
let tmp_handle = function () {
const xhr = this;
inject_info.xhr = true
const xhr_response_getter = Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype, "response").get;
const xhr_rsponse_hander = {
get: () => {
let result = xhr_response_getter.call(xhr);
if (xhr.readyState === XMLHttpRequest.DONE) {
if (xhr.responseURL.indexOf('youtubei/v1/player') > -1) {
result = data_process.text_process(result, ytInitialPlayerResponse_ad_rule, 'insert', true)
}
if (xhr.responseURL.indexOf('youtube.com/playlist') > -1) {
let obj
try {
obj = JSON.parse(result)
} catch (error) {
log('JSON解析失败', 1);
return result
}
data_process.obj_process(obj[2].playerResponse, ytInitialPlayerResponse_ad_rule, true)
data_process.obj_process(obj[3].response, watch_page_ytInitialData_ad_rule, true)
tmp_debugger_value = obj
result = JSON.stringify(obj)
}
} else {
result = ''
}
return result
},
configurable: true
}
define_property_hook(xhr, "responseText", xhr_rsponse_hander);
define_property_hook(xhr, "response", xhr_rsponse_hander);
XMLHttpRequest.prototype.open__.apply(this, arguments);
}
native_method_hook('XMLHttpRequest.prototype.open', tmp_handle)
抱歉忘記測試chrome,chrome和cent都沒辦法
我後面再重開機測試看看
不好修就算了沒事..頂多把分頁拉出來就不會在背景了,不常碰到這種使用情況
真是勞煩你檢查了~"~
(另外多重測試後,發覺攔截腳本 1.1.6 版本不會停止,1.1.7 以後才會無法讀取緩衝)
所以是只有 youtube-js-engine-tamer 跟 攔截腳本 兩個開啟嗎
是的,擴充都關閉了1.1.6 版本不會停止,1.1.7 和最新版本會停止?
沒錯
https://github.com/cyfung1031/userscript-supports/raw/main/tmp-480192.user.js
你換這個試試看
把裡面的
const HACK_ytInitialPlayerResponse = true;
const HACK_ytInitialData = true;
const HACK_userAgent = true;
const HACK_createElement = true;
const HACK_fetch = true;
const HACK_Request = true;
const HACK_XHR = true;
true
改成false
; 試試找出是哪一個有衝突
(也有可能全部false都會有衝突)
HACK_Request = true;
從這個開始,48秒短片https://www.youtube.com/watch?v=XgZv_OpnZGo
緩衝有多讀取,但大部分卡最後一小段
但是這個還是一樣卡第一段,都大約30秒https://www.youtube.com/watch?v=0aIzfekltOM
【歌ってみた】ギフト / 内緒のピアス cover by TanZ
後來全部false,基本同樣情況...
測試前都會ctrl+shift+R以及ctrl+F5測試
所以只要把 HACK_Request = true;
改成 HACK_Request = false;
兩邊都能打開沒問題?
你試試
HACK_Request = true;
和
FIX_XHR_REQUESTING = false;
看看是不是也沒有問題
HACK_Request = false;是,打開都沒問題
如果 HACK_Request = true; 會出現什麼? 不是只有 " 緩衝有多讀取,但大部分卡最後一小段 " 這個問題嗎?應該四個都是成功吧
嘗試修正了 HACK_Request 相關的部份,你再安裝一次看看
https://github.com/cyfung1031/userscript-supports/raw/main/tmp-480192.user.js
剛下班不好意思
https://www.youtube.com/watch?v=0aIzfekltOM
【歌ってみた】ギフト / 内緒のピアス cover by TanZ
對這個來說HACK_Request = true;或false
或改FIX_XHR_REQUESTING = false;
都是一樣卡第一段緩衝
嘗試修正了 HACK_Request 相關的部份,你再安裝一次看看
https://github.com/cyfung1031/userscript-supports/raw/main/tmp-480192.user.js
腳本自動更新了~
仍然卡第一段緩衝...
-------------
剛安裝了[停用 YouTube AV1 和 VP9],竟然就正常了!!!
https://greasyfork.org/zh-TW/scripts/466132-disable-youtube-av1-and-vp9
const HACK_ytInitialPlayerResponse = true;
const HACK_ytInitialData = true;
const HACK_userAgent = true;
const HACK_createElement = true;
const HACK_fetch = true;
const HACK_Request = true;
const HACK_XHR = true;
所以這部份怎麼改也是 卡第一段緩衝 ?
是阿...不管哪一個false都是這樣...
https://photos.app.goo.gl/cd2d7SHDwmUn2ip96
嘗試錄製現場,不過如果分享系統音訊,似乎就會因為要讀取聲音,所以影片不會卡住...
所以測試影片就沒抓聲音...中間等待30秒可以跳過
喔..純粹就是播放到緩衝尾巴,然後影片卡住,標籤頁的喇叭會消失,這時候要切換過去,就會繼續讀取緩衝
確認可以重現,在0:20那個地方卡住了
問題解析中
修好了 你確認一下
確認可以正常播放了!
感謝~
chrome和cent都順利!
最近更新嘗試解決長久以來 空白鍵 不能有效暫停影片的問題
有問題請報告
偶然測試到
YouTube JS Engine Tamer開著時
如果同時開
YouTube EXPERIMENT_FLAGS Tamer
空白鍵就無法執行(沒開tabview原本是會網頁下跳,有開tab則是不能執行影片暫停播放)
不過我現在比較不太用FLAGS Tamer了,想說有關空白鍵回報下
-----------------------
JS Engine Tamer最新版0.14.2
和tabview同時開會有高機率出現TAB表單停留在剛載入的小框,無法放大
(ctrl+r或F5才會出現,如果ctrl+F5或ctrl+shift+r則正常載入)
應該只是CSS衝突,因為Live Borderless有開就能正常放大,剛好停用所有樣式才發現
感謝回報
YouTube EXPERIMENT_FLAGS Tamer
空白鍵就無法執行(沒開 tabview 原本是會網頁下跳,有開 tab 則是不能執行影片暫停播放)
JS Engine Tamer
另外最近做了這個
有興趣可以試試 https://greasyfork.org/scripts/493607-youtube-fadeinchatmessage
辛苦了
YT現在原來多了空白長按2X~
滑鼠長按也2X了,有看到有人寫腳本阻止滑鼠2X
fadeinchatmessage感覺視覺效果,好像是聊天室文字瞬間閃一下
原來裡面可以改淡入ms
不過我現在比較不太用FLAGS Tamer了,想說有關空白鍵回報下
最近發現開了 FLAGS Tamer 真的會較順
現在我在試以下組合。有興趣可以試一下
這樣的話應該不會有廣告問題
之前單開1.,有時首頁廣告會偶爾顯示佔位就會多開
Remove Ads Slots in YouTube Main Page
不過最近1.新版似乎沒有這問題了
3.原本有裝,不過不清楚差在哪裡,看介紹寫測試,就沒問了
組合來測試看看,1.的看起來是您的修改版,我安裝一下
不好意思,和廣告攔截腳本同時開後導致畫面黑,F5的瞬間能看到封面
https://greasyfork.org/zh-TW/scripts/480192
由於兩邊都剛更新過,無法確定哪邊衝突不好意思,先問看看。
倒退歷史版本也一樣會黑畫面
目前CHROME和CENT都會這樣