mil*_*7en 2 javascript google-chrome google-chrome-extension google-chrome-devtools
我试图拦截Web请求并将它们重定向到我已保存在本地存储上的URL,但它无法正常工作.我的代码如下:
chrome.webRequest.onBeforeRequest.addListener(
function (details) {
if (details.url === 'http://myapp.com/theurl') {
chrome.storage.local.get("http://myapp.com/theurl", function (result) {
return { redirectUrl: result.savedUrl }; //savedUrl property is the modified Url
});
}
}, { urls: ["<all_urls>"] }, ["blocking"]);
Run Code Online (Sandbox Code Playgroud)
硬编码return语句/ url的工作原理:
chrome.webRequest.onBeforeRequest.addListener(
function (details) {
if (details.url === 'http://myapp.com/theurl') {
return { returnUrl : 'http://myapp.com/modifiedurl' };
});
}
}, { urls: ["<all_urls>"] }, ["blocking"]);
Run Code Online (Sandbox Code Playgroud)
该chrome.storageAPI是异步的,所以,你正在服用这里的做法是行不通的.您所拥有的代码所发生的事情的基本贯穿是:
http://myapp.com/theurlchrome.storage.local.getchrome.storage.local.get调用中的代码(即return语句)不会立即执行,并且会在稍后的某个时间运行有几种方法可以使这项工作.最简单的方法是在加载扩展时将本地存储的值存储在某个变量中(比如说,调用它storage_cache).然后从webRequest监听器中你可以说return { redirectUrl: storage_cache.savedUrl };
如果您的存储将经常更改,那么有比这更好的方法......但是,对于您选择的任何实现,要记住的关键是不要混淆同步和异步事件.
| 归档时间: |
|
| 查看次数: |
1076 次 |
| 最近记录: |