【问题标题】:Need to replace a javascript string on a specific domain page using a chrome extension需要使用 chrome 扩展替换特定域页面上的 javascript 字符串
【发布时间】:2013-08-05 14:30:12
【问题描述】:

尝试使用 chrome 扩展替换特定域页面上的 javascript 字符串。

这是我目前所拥有的:


ma​​nifest.json 文件(当然不是整个文件)

"permissions": [ "tabs", "cookies", "http://*/*" ],
"background": {
    "page": "background.html"
},


background.html 文件

<script type="text/javascript" src="js/replace.js"></script><br>


js/replace.js 文件

if (window.location.href.indexOf('http://somedomain.com/page') != -1) {
    var str="javascriptstring = javascriptstring('javascriptstring');";
    var n=str.replace("aaaaaaaaaaaaa;");
}



当我打开页面时,页面上没有任何反应。我查看页面源,但没有任何内容被替换。

我尝试用以下代码替换 js/replace.js 文件来测试它:

if (window.location.href.indexOf('http://somedomain.com/page') != -1) {
    alert("Hello World!");
}

但是,当页面加载时,没有弹出警告说你好世界。这意味着脚本可能甚至没有在页面上运行,除非我写错了 Hello World javascript。

我做错了什么?

附言我的扩展的其余部分(与此无关)工作得很好。


更新:

我尝试了另一种方法,也不起作用

loc = window.location.href;
match = loc.match(/somedomain\.com\/page);
if(match)
    window.location = loc.replace(bsa, "aaaaa");

更新二:

我尝试了此代码,并使用内容脚本代替在清单中定义,以便仅在此 URL 上运行此文件。

loc = window.location.href;
    alert("Hello World!");

在页面加载时成功弹出 Hello World;现在让我们尝试进行替换。


更新三:

我收到 Hello World 弹出窗口,这意味着脚本正在运行,但代码没有被替换。

尝试 1:

loc = window.location.href;
alert("Hello World!");
window.location = loc.replace(texttext, "aaaaa");

结论:
“Hello World”弹出窗口:成功
已替换代码:失败

--

尝试 2:

loc = window.location.href;
alert("Hello World!");
loc.replace(texttext, "aaaaa");

结论:
“Hello World”弹出窗口:成功
已替换代码:失败

--

尝试 3:

loc = window.location.href;
alert("Hello World!");
texttext = "aaaaa";

结论:
“Hello World”弹出窗口:成功
已替换代码:失败

--

尝试 4:

loc = window.location.href;
alert("Hello World!");
var str="texttext";
var n=str.replace("texttext","aaaaa");

结论:
“Hello World”弹出窗口:成功
已替换代码:失败


所以还是不行。我做错了什么?

【问题讨论】:

  • 作为评论,告诉那些回答你问题的人他们的“答案是垃圾”并不是特别礼貌或建设性的。如果答案有问题,请尝试更详细地说明问题所在。

标签: javascript google-chrome-extension


【解决方案1】:

您需要为此使用内容脚本,这是文档,http://developer.chrome.com/extensions/content_scripts.html。您还错误地使用了“replace()”方法。该方法仅更改您将其应用于的任何变量的值,在您的情况下为“str”。如果要更改“javascriptstring”的值,只需放置

javascriptstring = 'javascriptstring';

在js文件中希望在特定域加载时运行。

【讨论】:

  • 不,我不能使用内容脚本。因为我的内容脚本在不同的域上运行。除非您能告诉我如何在单个 Chrome 扩展程序中在两个单独的域上运行两个单独的内容脚本(一个内容脚本仅在一个域上运行,而不在另一个域上运行;反之亦然),我认为这是不可能的.因此我需要使用纯 javascript 文件来完成。
  • 尝试将另一个对象添加到内容脚本数组。例如:"content_scripts": [ { "matches": ["http://domain1.com/*"], "js": ["js1.js"] }, { "matches": ["http://domain2.com/*"], "js": ["js2.js"] } ]
  • 不,它不起作用。我礼貌地说谢谢,但并没有解决问题。我没有比开始时更进一步。
  • @user2651403 这个答案是正确的,你必须使用内容脚本。如果你想在页面中编辑变量,脚本必须是injected。如果您想修改文档中的一些可见文本,请参阅this example
  • 否 - 我正在使用内容脚本,但这并没有在页面上执行任何操作。 Hello World 有效,这意味着脚本正在页面上运行,但代码无法替换任何内容。我不想修改可见文本。我想修改页面中的Javascript代码。
猜你喜欢
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
相关资源
最近更新 更多