打开 window 并浏览页面
opening window and navigating through page
我正在尝试使用内容脚本浏览网页。但是该函数保留 运行 因为每次页面更改时它都会通过脚本运行。我想知道是否有更好的方法来做到这一点,因为它是一个资源消耗者,并且由于不断刷新而不允许用户与页面交互。
这是有问题的代码,如果看起来很奇怪,请见谅。我对 jQuery.
的了解不超过几周
$(document).ready(function(){
console.log("Made it here" + window.location.href);
loc = window.location.href;
match = loc.match('http://url.com/uc/');
if (match) {
window.location = "http://url.com/uc/health/index/1";
console.log("2 here");
window.location = "http://url.com/uc/health/communication/createSelectTemplate";
console.log("3 here");
chrome.storage.local.get('formOption', function(result) {
document.getElementById('formTemplate').value = result.formOption;
document.forms[0].submit();
});
}
});
我必须在使用值之前浏览三个 windows 的原因是因为创建此网站的人有超时 cookie,并且在加载前一个页面之前无法调用这些页面。
这是一个内容脚本,所以所有代码都在下一页。也许如果有办法检查确切的 url?但是我之前玩那个的时候电脑不区分
urlhere.com/uc/
和
urlhere.com/uc/health/index/1
每次导航时(例如,在分配 window.location
后立即),您的脚本停止执行会随页面一起卸载,而当下一页加载时,内容脚本确实会再次加载。如果加载相同的脚本,相同的初始状态,当然会执行相同的操作
可能的解决方案(有很多):
匹配更精确(=更好地注意到实际变化的状态)。
loc.match('http://url.com/uc/')
只会检查地址 是否包含 该字符串 - 您显示的所有 URL 都会这样做。为什么不直接使用 loc == 'http://url.com/uc/'
(并检查中间页面)?
使用细粒度的内容脚本(=加载不同的脚本)。
清单定义了哪些页面加载了哪些脚本。我假设你有这样的东西:
"content_scripts" : [{
"js" : ["jquery.js", "content1.js"],
"matches": ["http://*"]
}]
您可以编写多个脚本并让 Chrome 解析 URL。例如,content1.js
将执行第一个重定向,content2.js
将执行第二个。
"content_scripts" : [{
"js" : ["jquery.js", "content1.js"],
"matches": ["http://url.com/uc/"]
}, {
"js" : ["jquery.js", "content2.js"],
"matches": ["http://url.com/uc/health/index/1"]
}]
使用一些持久状态(在导航之间持续存在)来指示您处于重定向的哪个阶段(=自己控制更改状态)。
该页面的 sessionStorage
非常适合此用途,因为它仅在选项卡中持久存在:
if (match) {
switch (sessionStorage.redirectStage) {
case 3:
// We're at the final page, do actual work
break;
case 2:
sessionStorage.redirectStage = 3;
window.location = "http://url.com/uc/health/communication/createSelectTemplate";
break;
default: // Includes initial state when it's unset
window.location = "http://url.com/uc/health/index/1";
}
}
我正在尝试使用内容脚本浏览网页。但是该函数保留 运行 因为每次页面更改时它都会通过脚本运行。我想知道是否有更好的方法来做到这一点,因为它是一个资源消耗者,并且由于不断刷新而不允许用户与页面交互。
这是有问题的代码,如果看起来很奇怪,请见谅。我对 jQuery.
的了解不超过几周$(document).ready(function(){
console.log("Made it here" + window.location.href);
loc = window.location.href;
match = loc.match('http://url.com/uc/');
if (match) {
window.location = "http://url.com/uc/health/index/1";
console.log("2 here");
window.location = "http://url.com/uc/health/communication/createSelectTemplate";
console.log("3 here");
chrome.storage.local.get('formOption', function(result) {
document.getElementById('formTemplate').value = result.formOption;
document.forms[0].submit();
});
}
});
我必须在使用值之前浏览三个 windows 的原因是因为创建此网站的人有超时 cookie,并且在加载前一个页面之前无法调用这些页面。 这是一个内容脚本,所以所有代码都在下一页。也许如果有办法检查确切的 url?但是我之前玩那个的时候电脑不区分
urlhere.com/uc/
和
urlhere.com/uc/health/index/1
每次导航时(例如,在分配 window.location
后立即),您的脚本停止执行会随页面一起卸载,而当下一页加载时,内容脚本确实会再次加载。如果加载相同的脚本,相同的初始状态,当然会执行相同的操作
可能的解决方案(有很多):
匹配更精确(=更好地注意到实际变化的状态)。
loc.match('http://url.com/uc/')
只会检查地址 是否包含 该字符串 - 您显示的所有 URL 都会这样做。为什么不直接使用loc == 'http://url.com/uc/'
(并检查中间页面)?使用细粒度的内容脚本(=加载不同的脚本)。
清单定义了哪些页面加载了哪些脚本。我假设你有这样的东西:
"content_scripts" : [{ "js" : ["jquery.js", "content1.js"], "matches": ["http://*"] }]
您可以编写多个脚本并让 Chrome 解析 URL。例如,
content1.js
将执行第一个重定向,content2.js
将执行第二个。"content_scripts" : [{ "js" : ["jquery.js", "content1.js"], "matches": ["http://url.com/uc/"] }, { "js" : ["jquery.js", "content2.js"], "matches": ["http://url.com/uc/health/index/1"] }]
使用一些持久状态(在导航之间持续存在)来指示您处于重定向的哪个阶段(=自己控制更改状态)。
该页面的
sessionStorage
非常适合此用途,因为它仅在选项卡中持久存在:if (match) { switch (sessionStorage.redirectStage) { case 3: // We're at the final page, do actual work break; case 2: sessionStorage.redirectStage = 3; window.location = "http://url.com/uc/health/communication/createSelectTemplate"; break; default: // Includes initial state when it's unset window.location = "http://url.com/uc/health/index/1"; } }