szzxc 发表于 2024-9-29 10:45
// ==UserScript==
// @name 跨域交互
// @description ...
你这个例子不太好,点击搜索后页面会发生刷新,连带着iframe也被刷掉了,导致交互效果看不出来,我给改成新标签页了,跟iframe原理一致:
// ==UserScript==
// @name 跨域交互
// @description ...
// @namespace ...
// @author ...
// @version 1.0
// @match https://www.baidu.com/*
// @match https://www.sogou.com/*
// @grant none
// @run-at document-idle
// ==/UserScript==
(function() {
'use strict';
if (location.href.includes('baidu')) {
window.open('https://www.sogou.com/');
window.addEventListener('message', e => {
if (e.data.loaded) {
console.log('搜狗已加载。');
document.querySelector('input#su').addEventListener('click', () => {
e.source.postMessage({
search: true,
value: document.querySelector('input#kw').value
}, 'https://www.sogou.com');
});
}
});
}
if (location.href.includes('sogou')) {
window.opener.postMessage({
loaded: true
}, 'https://www.baidu.com');
window.addEventListener('message', e => {
if (e.data.search) {
document.querySelector('input#query').value = e.data.value;
document.querySelector('input#stb').click();
}
});
}
})();
提示跨域肯定是因为你在百度作用域下试图操作搜狗的元素了,注意上下两段分别是不同的作用域,你可以理解为2个脚本在交互。