首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript向所有新Image()实例添加侦听器或自动添加属性

Javascript向所有新Image()实例添加侦听器或自动添加属性
EN

Stack Overflow用户
提问于 2015-12-04 15:51:18
回答 1查看 69关注 0票数 2

有一个第三方javascript被注入,在构建特定路径的逻辑之后创建一个新Image(),但不将其追加到文档中。

代码语言:javascript
复制
(function(){
    {....}
    new Image().src = "some_image_path";
})();

问题是,我希望能够得到生成的"some_image_path“。我不想改变它什么的,只要得到它的价值。我不能控制那个第三方JS,它是不能改变的。我试过使用cujojs/meld,但是它要么什么也不做,要么出现了“非法调用”错误。

我是否可以通过观察Image/HTMLImageElement obj或将onload属性自动添加到我定义的函数中来获得src值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-04 16:02:51

您可以尝试使用自定义的Image构造函数在闭包中加载第三方脚本。

代码语言:javascript
复制
(function() {
  var img;
  var Image = function Image() {
    return img = new (Function.prototype.bind.apply(window.Image, arguments));
  }

  // This is where the 3rd party code should be injected.
  // I'm assuming that since you're including it on your page, you know its source and trust it enough to `eval` it.
  // You won't be able to use a `<script>` tag to load it since that would execute in the global scope.
  // You'll likely need to use AJAX to fetch the script contents and pass to eval here.
  eval("new Image().src = some_image_path");

  return img;
})().src == some_image_path;

编辑

您可以重写全局Image (然后友好地处理它,然后再修复它)。因为脚本标记是按顺序计算的,所以这应该有效。

代码语言:javascript
复制
<script>
  var img;
  var oldImage = Image;
  Image = function Image() {
    return img = new (Function.prototype.bind.apply(oldImage, arguments));
  }
</script>

<script src="..."></script>

<script>
  // img now contains the instantiated `Image` object
  img.src; // do what you will with this

  // Clean up
  Image = oldImage;
</script>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34092189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档