Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[DEPRECATED]如何通过Stay来适配网站? #2

Closed
shenruisi opened this issue Oct 27, 2021 · 0 comments
Closed

[DEPRECATED]如何通过Stay来适配网站? #2

shenruisi opened this issue Oct 27, 2021 · 0 comments
Labels
good first issue Good for newcomers

Comments

@shenruisi
Copy link
Owner

shenruisi commented Oct 27, 2021

在manifest.json中编辑content_scripts

你可以参考content_scripts的说明来使得目标网站可以注入你的js代码。
当然你也可以参考现在已有的manifest.json中的内容。

编写注入的js代码

在注入你的逻辑js代码前,请确保已经注入common.js。

启动

函数说明

Inject.run

名称 类型 解释
tasks Array 任务列表
interval Integer 执行间隔(毫秒数)
maxLoop Integer 最大执行次数
firstRun Boolean 是否立即执行

.then
所有任务执行完成后返回的数据,用户填充popup.html。(目前只支持App数据)

document.addEventListener("DOMContentLoaded", function(event) {
    let tasks = [removeTopBanner,unfold];
    Inject.run(tasks,100,30,false).then((data) => {
        browser.runtime.sendMessage({from:"content",operate:"saveAppList",data:data})
    });
});

任务函数的粒度控制

对于加入到tasks列表的函数,你还可以通过不同的返回值来控制函数执行的次数。

返回值 解释
COMPLETE 任务完成退出
QUIT 强制任务退出,没有完成标志
CONTINUE 继续执行直到maxLoop
CONTINUE_TIL(X) 继续执行到第X次为止,总执行次数为min(X,maxLoop)
function unfold(){
    let button = document.querySelector('div.fold-btn-btn');
    if (button){
        button.remove();
        let content = document.querySelector('div.fold-btn-content')
        if (content){
            content.className = null;
            content.className = "fold-btn-content";
        }
        return COMPLETE;
    }
    
    return CONTINUE;
}

阻止App跳转

Stay目前是通过将页面加载在iframe中来阻止目标网页进行应用跳转的。
由于目标网站对于iframe的限制有所不同,目前Stay主要是两种方式。

  • 对于限制了iframe必须同源加载的网站请在目标网站host后加入
    path/R_E_D_I_R_E_C_T/并且将真正的目标链接放入参数url中即可。如:知乎
 "https://zhuanlan.zhihu.com/R_E_D_I_R_E_C_T/?url="+encodeURIComponent(url);

如果使用了该方法,请将对应content.js的代码放在window.onload中启动(location.replace不会调用window.onload事件)

  • 对于未限制了同源加载的目标网站可以加载插件内容iframe网页来显示。如:哔哩哔哩
$res('iframe.html')+"?url="+encodeURIComponent(url);
  • 最后将组装好点的链接替换掉原来会进行App跳转的链接

相应的代码可以在common.js#$noJumpUrl中参考并且添加。

@shenruisi shenruisi pinned this issue Oct 27, 2021
@shenruisi shenruisi added the good first issue Good for newcomers label Oct 27, 2021
@shenruisi shenruisi changed the title 如何通过Stay来适配网站? [DEPRECATED]如何通过Stay来适配网站? Dec 24, 2021
@shenruisi shenruisi unpinned this issue Dec 24, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

1 participant