【问题标题】:How to call functions in the original page(tab) in Chrome Extensions如何在 Chrome 扩展程序中调用原始页面(选项卡)中的函数
【发布时间】:2012-11-08 14:01:45
【问题描述】:

我现在正在制作 Chrome 扩展程序。我想从 Chrome 扩展中调用在原始页面(选项卡)中定义的 JS 函数。不管是background.html 还是Content_Script 调用它们都没有关系。

例如:

原始页面(标签)

<html>
<head>
<title>Original Page</title>
<script>
function greeting(){
    alert("Ohayou!");
    // some other codes here
}
</script>
</head>
<body></body>
</html>

然后我想从 Google Extensions 调用原始页面中的“问候”功能。 我该怎么做?

【问题讨论】:

  • 您必须将代码注入原始页面。 Rob W 在这里解释得很好:Building a Chrome Extension - Inject code in a page using a Content script
  • 谢谢。所以我可以做的一件事是注入一个从 Chrome 扩展程序调用并在原始页面中调用函数的代码。我的意思是Chrome扩展-->在原页面注入代码-->在原页面原功能我的理解是正确的??
  • 因为答案比这个字段允许的长一点,我写了一个回复你的问题。

标签: google-chrome-extension


【解决方案1】:

你也可以简单地写在你的内容脚本中:

location.href="javascript:greeting(); void 0";

【讨论】:

  • 简单,直接,没有代码注入开销!好一个
  • 谢谢,这是一个非常聪明、优雅的解决方案。
  • 拒绝执行 JavaScript URL,因为它违反了以下内容安全策略指令:“script-src 'self' 'unsafe-eval'”。启用内联执行需要“unsafe-inline”关键字、哈希(“sha256-...”)或随机数(“nonce-...”)。
  • 即使在 2018 年也像魅力一样工作...... :) 这是我见过的最聪明的 js hack 之一......好朋友......
  • 我知道这行得通。我不明白为什么这有效。 location.href 是源的链接,将其设置为等于该字符串或javascript:Whatever-Function-You-Want-To-Call-On-Your-Page(); 在调试器中的 VM 中打开该函数调用并执行本地代码。我知道这就是发生的事情,但是怎么办?为什么?为什么会这样???
【解决方案2】:

对于第一部分,您可以使用这个不错的答案:Insert code into the page context using a content script

在内容脚本中调用函数很容易。您可以create your own event 然后在您的内容脚本中收听。 这将像这样工作:

注入代码

var evt = document.createEvent('Event');
evt.initEvent('myCustomEvent', true, false);

// fire the event
document.dispatchEvent(evt);

内容脚本

document.addEventListener('myCustomEvent', function() {
  // do whatever is necessary
});

【讨论】:

  • 我想调用一个在页面脚本文件中定义的函数。请帮忙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多