我正在制作一个需要找到与另一个单词相关的单词的用户脚本。我找到a site,我可以转到http://semantic-link.com/#/stack,并且会有一个与stack
相关的字词列表,其格式为:
<!-- various stuffs here, e.g. <head>, a <div>, another <div>, start of <body> -->
<div id="word0" class="word" onclick="updateTitle("stacks");" style="opacity: 1;">
stacks
</div>
<div id="word1" class="word" onclick="updateTitle("flue");" style="opacity: 1;">
flue
</div>
<div id="word2" class="word" onclick="updateTitle("popped");" style="opacity: 1;">
popped
</div>
<div id="word3" class="word" onclick="updateTitle("overflow");" style="opacity: 1;">
overflow
</div>
在这种情况下,我想从该页面获取字符串stacks
。我发现的所有解决方案都不起作用,因为它们:
$.ajax()
,$.get()
或$('something').load()
限制在其执行的域中。有没有什么方法可以只使用JavaScript将#word0
元素的内容作为字符串获取?或者,是否有其他方法可以找到与另一个单词相关的单词?
答案 0 :(得分:6)
您在问题中说明:
$.ajax()
,$.get()
或$('something').load()
...仅限于在其中执行的域。
这似乎指向了jQuery。实际上,限制是在浏览器本身使用Javascript,并且归结为一个名为Same Origin Policy的特定安全方面:
该策略允许在源自同一站点的页面上运行的脚本(方案,主机名和端口号的组合)在没有特定限制的情况下访问彼此的DOM,但阻止访问不同站点上的DOM < / p>
从本质上讲,除非远程服务器启用CORS以允许服务器的查询调用它,否则您无法尝试执行的操作。由于您无法控制远程服务器,我怀疑这是否已设置。
答案 1 :(得分:4)
由于同源策略,仅使用javascript是不可能的。必须有一些服务器端干预来检索html,无论是通过第三方服务(如YQL)还是您自己的php(或其他)脚本。
答案 2 :(得分:2)
为什么不获得他正在获得的JSON?如果我错了,请纠正我,但你只是在相关的词之后,而不是用户点击的内容?
$.get("http://semantic-link.com/related.php?word="+word);
编辑:试试这个:
$.getJSON("https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20json%20where%20url%3D'http%3A%2F%2Fsemantic-link.com%2Frelated.php%3Fword%3Dword'&format=json&diagnostics=true&callback=",function(data){
alert(data.query.results.json.json[0].v);
});
答案 3 :(得分:1)
我认为你想要的是非常可行而且很容易实现。
首先,您必须注意,当您在该网站中查询任何单词时,它将在幕后进行“ajax”调用,例如:http://semantic-link.com/related.php?word=shrewd。意识到这个URL就是诀窍。
请注意,它会为您带来JSON格式作为响应。所以你现在需要做的就是解析它。只需将上面示例中的URL中的单词替换为您要使用的单词,即可完成。 ;)