我有一個Tampermonkey腳本,運行在document-start
。
如何檢查內聯JavaScript是否被禁用?如何檢查內聯JavaScript是否被禁用(使用Tampermonkey)
0
A
回答
0
這是有問題的,因爲阻塞內聯JS的某些(最?)方法:(a)不會阻止unsafeWindow
操作並且(b)拋出Tampermonkey腳本中沒有被try ... catch
塊捕獲的異常。
所以下面的工作,但如果內聯JS被禁用,你會看到這樣的錯誤:
拒絕,因爲它違反了以下內容安全策略指令執行內嵌腳本:「劇本-SRC「不安全-EVAL '*'。 「內聯不安全」關鍵字,散列('sha256-6BrJXtaiqFeKY4qCquiR3JgWK2KweFWHCvhZWr4tkxA =')或一個隨機數('nonce -...')是啓用內聯執行所必需的。
在控制檯中。這樣的錯誤令人討厭,但他們不會阻止Tampermonkey腳本。
工作演示代碼:
// ==UserScript==
// @name Test local JS
// @match *://stackoverflow.com/questions/*
// @run-at document-start
// @grant unsafeWindow
// ==/UserScript==
let gbl_InlineJS_Works = true;
try {
unsafeWindow.TM_youAliveCanary = true;
}
catch (zError) {
console.log ("Local JS fails: " + zError);
gbl_InlineJS_Works = false;
}
if (gbl_InlineJS_Works) {
var tstScript = document.createElement ('script');
tstScript.textContent = "TM_canaryIsAlive = true;";
try {
document.documentElement.appendChild (tstScript);
}
catch (zError) {
console.log ("Local JS fails: " + zError);
gbl_InlineJS_Works = false;
}
if (gbl_InlineJS_Works) {
if (! unsafeWindow.TM_canaryIsAlive) {
gbl_InlineJS_Works = false;
}
}
}
console.log (`Inline javascript ${gbl_InlineJS_Works ? "works!" : "is blocked."}`);
0
一種方式是訪問頁面的標題。要做到這一點,你必須發出一個http請求Accessing the web page's HTTP Headers in JavaScript
你也可以考慮一下這些解決方案How to detect Content Security Policy (CSP)
的 - 更新1
這基本上是未經檢驗的。我跑它對facebook.com
function inlineScriptEnabled() {
let req = new XMLHttpRequest();
req.open('GET', document.location, false);
req.send(null);
let header = req.getResponseHeader('content-security-policy');
if (!header)
return true;
let regex = /(^|\s)'unsafe-inline'(;|\s|$)/i;
return !!header.match(regex);
}
console.log(inlineScriptEnabled());
您還應該搜索文檔的元標記如下所述。 https://developers.google.com/web/fundamentals/security/csp/#the_meta_tag邏輯將類似。
相關問題
- 1. 檢查javascript是否被禁用?
- 2. Javascript:如何檢查DropDownList是否被禁用
- 3. 檢查用戶是否被禁止(Laravel)
- 4. 如何檢查用戶是否禁用了互聯網?
- 5. 如何檢查appender是否被禁用/啓用
- 6. 如何檢查用戶是否在PHP中被禁用?
- 7. 如何查找apex:inputField是否被禁用
- 8. ASP.NET,檢查JavaScript是否禁用?
- 9. 如何檢查是否使用javascript
- 10. 如何檢查一個按鈕是否被點擊使用javascript?
- 11. 如何檢查按鈕是否被使用JavaScript
- 12. 檢測Javascript是否被禁用,如果是,則重定向
- 13. 如何檢查聯邦是否啓用
- 14. jQuery Mobile如何檢查按鈕是否被禁用?
- 15. 如何檢查瀏覽器緩存是否被禁用
- 16. 如何檢查我的fb應用程序是否被禁止?
- 17. 如何檢查下拉菜單是否被禁用?
- 18. 如何檢查一個控件是否被禁用?
- 19. 如何使用PackageManager檢查應用程序是否在方法中被禁用
- 20. 如何檢測Flash Player是否在使用JavaScript的瀏覽器中被禁用?
- 21. 如何檢查textarea的內容是否爲空白使用javascript?
- 22. 如何檢查變量是否在內存中使用javascript
- 23. 內聯禁用Firefox拼寫檢查?
- 24. 如何通過檢查JavaScript數組來檢查用戶名是否被採用。
- 25. 如何檢查是否使用SetThreadExecutionState禁用睡眠失敗?
- 26. 是否可以從JavaScript內禁用JavaScript?
- 27. 如何檢查用戶是否被授權內部操作
- 28. 如何檢查我的應用的任何用戶是否被Facebook禁止?
- 29. 檢查工作流是否被使用?
- 30. 檢查參數是否已被使用
在頁面上下文中插入一些代碼,該代碼應該回傳給您。如果你沒有收到消息('postMessage' /自定義事件),那麼它沒有運行。但是,這並不意味着某些JavaScript被禁用。有一些擴展可以根據不同的標準選擇性地禁用JavaScript。您是否正在測試被禁用的那種類型,或只是禁用了所有的JavaScript? – Makyen
我特別希望測試(來自Tampermonkey userscript)頁面上的所有內聯JavaScript是否已被禁用,例如,使用uBlock Origin過濾器,如'* $ inline-script,domain = stackoverflow.com'。正如Brock Adams提到的那樣,它似乎是使用CSP指令'script-src'unsafe-eval'*'來實現的。 – Six