Handle javascript in qute:settings more gracefully.

Fixes #727.
This commit is contained in:
Florian Bruhin 2015-06-03 15:03:04 +02:00
parent f0c58b58dd
commit e780efb3d9

View File

@ -34,6 +34,7 @@ import configparser
from PyQt5.QtCore import pyqtSlot, QObject from PyQt5.QtCore import pyqtSlot, QObject
from PyQt5.QtNetwork import QNetworkReply from PyQt5.QtNetwork import QNetworkReply
from PyQt5.QtWebKit import QWebSettings
import qutebrowser import qutebrowser
from qutebrowser.browser.network import schemehandler, networkreply from qutebrowser.browser.network import schemehandler, networkreply
@ -96,6 +97,12 @@ class JSBridge(QObject):
@pyqtSlot(int, str, str, str) @pyqtSlot(int, str, str, str)
def set(self, win_id, sectname, optname, value): def set(self, win_id, sectname, optname, value):
"""Slot to set a setting from qute:settings.""" """Slot to set a setting from qute:settings."""
# https://github.com/The-Compiler/qutebrowser/issues/727
if (sectname, optname == 'content', 'allow-javascript' and
value == 'false'):
message.error(win_id, "Refusing to disable javascript via "
"qute:settings as it needs javascript support.")
return
try: try:
objreg.get('config').set('conf', sectname, optname, value) objreg.get('config').set('conf', sectname, optname, value)
except (configexc.Error, configparser.Error) as e: except (configexc.Error, configparser.Error) as e:
@ -172,10 +179,18 @@ def qute_help(win_id, request):
def qute_settings(win_id, _request): def qute_settings(win_id, _request):
"""Handler for qute:settings. View/change qute configuration.""" """Handler for qute:settings. View/change qute configuration."""
config_getter = functools.partial(objreg.get('config').get, raw=True) if not QWebSettings.globalSettings().testAttribute(
html = jinja.env.get_template('settings.html').render( QWebSettings.JavascriptEnabled):
win_id=win_id, title='settings', config=configdata, # https://github.com/The-Compiler/qutebrowser/issues/727
confget=config_getter) template = jinja.env.get_template('pre.html')
html = template.render(
title='Failed to open qute:settings.',
content="qute:settings needs javascript enabled to work.")
else:
config_getter = functools.partial(objreg.get('config').get, raw=True)
html = jinja.env.get_template('settings.html').render(
win_id=win_id, title='settings', config=configdata,
confget=config_getter)
return html.encode('UTF-8', errors='xmlcharrefreplace') return html.encode('UTF-8', errors='xmlcharrefreplace')