【问题标题】:Block existing scripts阻止现有脚本
【发布时间】:2012-08-30 16:09:58
【问题描述】:

我正在为 Firefox 制作插件。我想从 HTML 页面中提取视频并将其显示在黑色背景上。这是我所拥有的。

//main.js
var pageMod = require("page-mod");

pageMod.add(new pageMod.PageMod({
  include: "http://myserver.fr/*",
  contentStyleFile: data.url("modify.css"),
  contentScriptFile: data.url('hack.js'),
  contentScriptWhen: 'start'
}));
//hack.js
video = document.body.innerHTML;
document.body.innerHTML = '';
video = video.substring(video.lastIndexOf("<object"),video.lastIndexOf("</object>"));
video = "<div id='fond'></div><div id='mavideo'>"+video+"</div>"

document.body.innerHTML = video;
document.body.style.backgroundColor = "black";
document.body.style.margin = "0";

我的代码有效,但问题是我必须等待“几个小时”,而其他 javascript 正在执行。我尝试使用 contentScriptWhen: 'start' 但我没有改变任何东西。

有没有办法阻止页面的其他脚本?

【问题讨论】:

    标签: javascript firefox-addon firefox-addon-sdk


    【解决方案1】:

    阻止脚本加载会有点困难,我们可以快速删除它们。

    // remove all scripts
    var scripts = document.getElementsByTagName("script");
    var parent = null;
    for (var i = 0; i < scripts.length; i += 1) {
        parent = scripts.item(i).parentNode;
        parent.removeChild(scripts.item(i));
    }
    

    此代码尝试从您的页面中删除所有脚本标记,这将停止加载任何脚本并允许您运行其余代码。把它放在你的 hack.js 脚本的顶部。

    我不知道您正在查看的页面,因此很难知道发生了什么,但您使用substringlastIndexOf 也不会很快。我们可以摆脱这些,看看您是否有任何明显的速度提升。

    尝试改用查询选择器和文档片段。这是一个例子:

    //hack.js
    var fragment = document.createDocumentFragment();
    var objects = document.getElementsByTagName("object");
    // create your div objects and append to the fragment
    var fond = document.createElement("div");
    fond.setAttribute("id", "fond");
    fragment.appendChild(fond);
    var mavideo = document.createElement("div");
    mavideo.setAttribute("id", "mavideo");
    fragment.appendChild(mavideo);
    // append all <object> tags to your video div
    for (var i = 0; i < objects.length; i += 1) {
        mavideo.appendChild(objects.item(i));
    }
    // clear and append it all in
    document.body.innerHTML = '';
    document.body.appendChild(fragment);
    

    该代码将所有对象放入文档片段中,因此您可以擦除整个页面,然后将其全部重新添加;不需要图书馆。您的 div 和 mavideo 也在其中。

    我并没有真正测试所有这些代码,所以希望它能按预期工作。

    【讨论】:

      猜你喜欢
      • 2011-03-09
      • 2020-01-11
      • 2014-04-13
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      相关资源
      最近更新 更多