如何修复拒绝在框架中显示 url 因为它在 webkitgtk python 中将 x 框架选项设置为拒绝
How to fix refused to display url in a frame because it set x frame options to deny in webkitgtk python
我正在使用 Python、Gtk 和 WebKitGtk 构建一个简单的网络浏览器。尝试加载 youtube 时,我收到此错误消息:
控制台消息:about:blank @0:拒绝在框架中显示 'https://accounts.google.com/ServiceLogin?continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26app%3Ddesktop%26feature%3Dpassive%26hl%3Den%26next%3D%252Fsignin_passive&hl=en&passive=true&service=youtube&uilel=3',因为它将 'X-Frame-Options' 设置为 'DENY'。
我的代码(来自 webkitgtk 上的教程):
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('WebKit', '3.0')
from gi.repository import Gtk, WebKit
class Main:
def __init__(self):
self.win = Gtk.Window()
self.win.set_position(Gtk.WindowPosition.CENTER)
self.win.set_title('window')
self.win.set_default_size(1200, 800)
self.btn_grid = Gtk.Grid()
self.btn_grid.set_column_spacing(10)
self.reload_button = Gtk.Button('Reload')
self.reload_button.connect('clicked', self.reload_window)
self.btn_grid.attach(self.reload_button, 0, 0, 1, 1)
self.url_entry = Gtk.Entry()
self.url_entry.set_hexpand(True)
self.url_entry.connect('activate', self.display_url)
self.btn_grid.attach(self.url_entry, 1, 0, 1, 1)
self.go_btn = Gtk.Button('Go')
self.go_btn.connect('clicked', self.display_url)
self.btn_grid.attach(self.go_btn, 2, 0, 1, 1)
self.main_box = Gtk.VBox()
self.main_box.pack_start(self.btn_grid, False, False, 0)
self.win.add(self.main_box)
self.webview = WebKit.WebView()
self.webview.connect('title-changed', self.title_update)
self.webview.load_uri("https://google.com")
self.scroll_area = Gtk.ScrolledWindow()
self.scroll_area.add(self.webview)
self.main_box.pack_start(self.scroll_area, True, True, 0)
self.win.connect('destroy', Gtk.main_quit)
def title_update(self, webview, frame, title):
self.win.set_title(f'window - {title}')
def display_url(self, event):
url = self.url_entry.get_text()
if url == '':
pass
else:
if "://" not in url:
url = f'https://{url}'
self.webview.load_uri(url)
self.webview.grab_focus()
def reload_window(self):
self.webview.reload()
def w_open(self):
self.win.show_all()
main_window = Main()
main_window.w_open()
Gtk.main()
我该如何解决这个问题? YouTube 在其他网络浏览器上加载正常。
您不能在 iframe
、object
或类似的其他浏览器标签或浏览器 windows
等上设置 X-Frame-Options。这是一种回应 header 由您请求资源的域设置(在您的示例中为 google.com)。在这种情况下,他们设置了 header,这意味着他们不允许加载资源。有关详细信息,请参阅 The X-Frame-Options response header on MDN。
如果请求的webapge是你的,那么你可以在响应中设置X-Frame-Options
headers,但看起来不是这样的。
我不知道你想做什么,我想你是在你的应用程序中登录 Youtube,你不能直接这样做,因为它需要 google 身份验证,你需要看看 google APIs 在你集成之前。
我正在使用 Python、Gtk 和 WebKitGtk 构建一个简单的网络浏览器。尝试加载 youtube 时,我收到此错误消息:
控制台消息:about:blank @0:拒绝在框架中显示 'https://accounts.google.com/ServiceLogin?continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Faction_handle_signin%3Dtrue%26app%3Ddesktop%26feature%3Dpassive%26hl%3Den%26next%3D%252Fsignin_passive&hl=en&passive=true&service=youtube&uilel=3',因为它将 'X-Frame-Options' 设置为 'DENY'。
我的代码(来自 webkitgtk 上的教程):
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('WebKit', '3.0')
from gi.repository import Gtk, WebKit
class Main:
def __init__(self):
self.win = Gtk.Window()
self.win.set_position(Gtk.WindowPosition.CENTER)
self.win.set_title('window')
self.win.set_default_size(1200, 800)
self.btn_grid = Gtk.Grid()
self.btn_grid.set_column_spacing(10)
self.reload_button = Gtk.Button('Reload')
self.reload_button.connect('clicked', self.reload_window)
self.btn_grid.attach(self.reload_button, 0, 0, 1, 1)
self.url_entry = Gtk.Entry()
self.url_entry.set_hexpand(True)
self.url_entry.connect('activate', self.display_url)
self.btn_grid.attach(self.url_entry, 1, 0, 1, 1)
self.go_btn = Gtk.Button('Go')
self.go_btn.connect('clicked', self.display_url)
self.btn_grid.attach(self.go_btn, 2, 0, 1, 1)
self.main_box = Gtk.VBox()
self.main_box.pack_start(self.btn_grid, False, False, 0)
self.win.add(self.main_box)
self.webview = WebKit.WebView()
self.webview.connect('title-changed', self.title_update)
self.webview.load_uri("https://google.com")
self.scroll_area = Gtk.ScrolledWindow()
self.scroll_area.add(self.webview)
self.main_box.pack_start(self.scroll_area, True, True, 0)
self.win.connect('destroy', Gtk.main_quit)
def title_update(self, webview, frame, title):
self.win.set_title(f'window - {title}')
def display_url(self, event):
url = self.url_entry.get_text()
if url == '':
pass
else:
if "://" not in url:
url = f'https://{url}'
self.webview.load_uri(url)
self.webview.grab_focus()
def reload_window(self):
self.webview.reload()
def w_open(self):
self.win.show_all()
main_window = Main()
main_window.w_open()
Gtk.main()
我该如何解决这个问题? YouTube 在其他网络浏览器上加载正常。
您不能在 iframe
、object
或类似的其他浏览器标签或浏览器 windows
等上设置 X-Frame-Options。这是一种回应 header 由您请求资源的域设置(在您的示例中为 google.com)。在这种情况下,他们设置了 header,这意味着他们不允许加载资源。有关详细信息,请参阅 The X-Frame-Options response header on MDN。
如果请求的webapge是你的,那么你可以在响应中设置X-Frame-Options
headers,但看起来不是这样的。
我不知道你想做什么,我想你是在你的应用程序中登录 Youtube,你不能直接这样做,因为它需要 google 身份验证,你需要看看 google APIs 在你集成之前。